예제 #1
0
파일: main.py 프로젝트: Qiwis/foodie
  def get(self):
    user = self.user_model
    get_notifications(user)
    current_date = datetime.datetime.now() - datetime.timedelta(hours=8)

    all_requests = Request.query(Request.start_time >= current_date).order(Request.start_time)
    all_requests = [r for r in all_requests if r.sender != user.key]
    pending_requests = Request.query(Request.status == 'pending').order(Request.start_time)
    pending_requests = [r for r in pending_requests if r.start_time < current_date]

    # Sort by food type
    type_sort = sorted(all_requests, key=lambda x:x.food_type)
    types = {}

    for r in type_sort:
      # Get all types
      if r.food_type not in types:
        types[r.food_type] = []

    for r in type_sort:
      for t in types:
        if r.food_type == t:
          types[t].append(r)
          break

    self.response.out.write(template.render('views/feed.html', {'user': user,
      'pending_requests': pending_requests, 'all_requests': all_requests, 'food_type':types}))
예제 #2
0
 def get(self):
   current_time = datetime.datetime.now() - datetime.timedelta(hours=8)
   max_time = current_time + datetime.timedelta(hours=1)
   dead_accepted_requests = Request.query(Request.start_time > current_time, Request.start_time < max_time).fetch()
   dead_accepted_requests = [x for x in dead_accepted_requests if x.status == "sms" and x.recipient != None]
   for request in dead_accepted_requests:
     request.status = "dead"
   dead_requests = Request.query(Request.start_time < current_time).fetch()
   dead_requests = [x for x in dead_requests if x.status == "waiting for a bid" or x.status =="pending"]
   for request in dead_requests:
     print "Removing request: " + str(request)
     request.key.delete()
예제 #3
0
def get_notifications(user):
  #Get Requests for Notifications
  accepted_requests = []
  new_requests = []
  current_time = datetime.datetime.now() - datetime.timedelta(hours=8)
  # Check for last login/update
  check_time = user.last_check
  print "Last Check: " , check_time
  if check_time is None:
    # Pull all results from previous week
    check_time = datetime.datetime.now() - datetime.timedelta(days=7, hours=8)
    print "Updated time: ", check_time

  # New requests
  available_requests = Request.query(Request.sender != user.key).fetch()
  available_requests = [r for r in available_requests if r.creation_time >= check_time]
  available_requests = [r for r in available_requests if r.start_time >= current_time]
  available_requests = [r for r in available_requests if r.recipient == None]

  # Approved requests
  approved_requests = Request.query(Request.recipient == user.key).fetch()
  approved_requests = [r for r in approved_requests if r.accept_time != None]
  approved_requests = [r for r in approved_requests if r.start_time >= current_time]
  approved_requests = [r for r in approved_requests if r.accept_time >= check_time]


  # Pending requests
  pend_requests = Request.query(Request.sender == user.key).fetch()
  pend_requests = [r for r in pend_requests if r.start_time >= current_time]
  pend_requests = [r for r in pend_requests if len(r.bidders) > 0]
  new_bidders = 0
  if len(pend_requests) > 0:
    for r in pend_requests:
      for bid in r.bidders:
        bid = bid.get()
        if bid.bid_time != None:
          if bid.bid_time > check_time:
            print "Bid Time: " , bid.bid_time
            new_bidders += 1
  else:
    pend_requests = [r for r in pend_requests if r.creation_time >= check_time]
    print "No bidders: ", pend_requests

  user.pending_requests = new_bidders
  user.available_requests = len(available_requests)
  print len(available_requests)
  user.approved_requests = len(approved_requests)
  print len(approved_requests)
  user.put()
  print "user updated"
예제 #4
0
  def get(self):
    user = self.user_model
    date = cgi.escape(self.request.get("date"))
    time = cgi.escape(self.request.get("time"))
    active_request = cgi.escape(self.request.get("edit_request"))
    if active_request:
      edit_request = ndb.Key(urlsafe=active_request).get()

    # Check for lack of values
    if len(date) < 1:
      if active_request:
        date = edit_request.start_time.strftime("%Y-%m-%d")
      else:
        self.response.out.write('Please choose date')

    # Convert date and time to datetime
    format_date = str(date+ " " +time+":00.0")
    start_time = datetime.datetime.strptime(format_date, "%Y-%m-%d %H:%M:%S.%f")

    # Check for current request within time limit
    ongoing_request = Request.query(Request.sender == user.key).fetch()

    # Remove current request if applicable
    if active_request:
      ongoing_request.remove(edit_request)
    alloted_date = start_time + datetime.timedelta(minutes=20) #Max limit

    create = timeCheck(ongoing_request, alloted_date, start_time)
    if create is True:
      self.response.out.write('Available')
    else:
      self.response.out.write('Time Already Passed/Reserved')
예제 #5
0
 def get(self):
   current_time = datetime.datetime.now() - datetime.timedelta(hours=8)
   # Get all requests in accepted state
   completed_requests = Request.query(Request.status == "foodie").fetch()
   #completed_requests = [x for x in completed_requests if x.start_time + datetime.timedelta(minutes=10) < current_time]
   for request in completed_requests:
     send_fire_notification(request)
     request.status = "attempt_fire"
     request.put()
예제 #6
0
 def get(self):
   current_time = datetime.datetime.now() - datetime.timedelta(hours=8)
   # 5 min before current
   min_time = current_time - datetime.timedelta(minutes=5)
   # 5 min after current
   max_time = current_time + datetime.timedelta(minutes=5)
   # Get all requests in accepted state
   completed_requests = Request.query(Request.status == "accepted").fetch()
   completed_requests = [x for x in completed_requests if x.recipient != None]
   #completed_requests = [x for x in completed_requests if x.start_time >= min_time and x.start_time < max_time]
   for request in completed_requests:
     send_sms(request)
     request.status = "sms"
     request.put()
예제 #7
0
  def get(self):
    user = self.user_model
    request_sort = cgi.escape(self.request.get('requests'))
    current_date = datetime.datetime.now() - datetime.timedelta(hours=8)
    # Return only those two hours or more in future
    alloted_time = current_date + datetime.timedelta(minutes=20)
    sorted_requests = []
    available_requests = Request.query(Request.start_time >= alloted_time).order(Request.start_time)
    print "alloted", alloted_time
    print "current", current_date
    if request_sort == 'price' or request_sort == 'location' or request_sort == 'hangouts' or request_sort == 'lessons':
      sorted_requests = sortRequests(request_sort, alloted_time)

    dead_requests = Request.query(Request.start_time <= alloted_time, Request.sender == user.key).order(Request.start_time)
    empty_requests = []
    pending_requests = []
    approved_requests = []

    # Get User requests
    my_requests = Request.query(Request.start_time >= alloted_time - datetime.timedelta(minutes=30),
                                Request.sender == user.key).order(Request.start_time).fetch()

    for request in my_requests:
      if len(request.bidders) > 0:
        if request.recipient != None:
          approved_requests.append(request)
        else:
          pending_requests.append(request)

    for request in available_requests:
      # Get all requests you didn't send
      if request.sender != user.key:
        # Request not accepted yet
        if request.recipient == None:
          # Check for bidders
          for bid in request.bidders:
            bid = bid.get()
            if bid.name == user.username:
              # Bid by user
              pending_requests.append(request)
          empty_requests.append(request)
        else:
          # Request has recipient
          if request.recipient == user.key:
            # You are recipient
            approved_requests.append(request)
        
    # Get sorted requests
    l_requests = Request.query().order(Request.location).fetch()
    location_requests = [r for r in l_requests if r.start_time >= alloted_time ]
    location_requests = [r for r in location_requests if r.recipient == None]

    p_requests = Request.query().order(Request.price).fetch()
    price_requests = [r for r in p_requests if r.start_time >= alloted_time]
    price_requests = [r for r in price_requests if r.recipient == None]

    h_requests = Request.query(Request.interest == 'fun').order(Request.start_time).fetch()
    hangouts_requests = [r for r in h_requests if r.start_time >= alloted_time]
    hangouts_requests = [r for r in h_requests if r.recipient == None]

    fl_requests = Request.query(Request.interest == 'food lesson').order(Request.start_time).fetch()
    foodlesson_requests = [r for r in fl_requests if r.start_time >= alloted_time]
    foodlesson_requests = [r for r in fl_requests if r.recipient == None]

    #user.last_check = datetime.datetime.now() - datetime.timedelta(hours=8)
    #print "Updated check time to: " , user.last_check
    user.put()

    for request in approved_requests:
      print "Approved:"
      print "Request:", request.key.urlsafe()
      print "Sender:", request.sender.urlsafe()
      print "Recipient:", request.recipient.urlsafe()
    
    self.response.out.write(template.render('views/requests.html',
                            {'user': user, 'sorted_requests': sorted_requests, 'my_requests': my_requests,
                            'price_requests': price_requests, 'location_requests': location_requests, 'hangouts_requests': hangouts_requests,
                            'foodlesson_requests': foodlesson_requests, 'empty_requests': empty_requests,
                            'accepted_requests':approved_requests, 'pending_requests': pending_requests}))
예제 #8
0
파일: main.py 프로젝트: Qiwis/foodie
  def get(self, profile_id):
    viewer = self.user_model
    get_notifications(viewer)
    viewer.last_check =datetime.datetime.now() - datetime.timedelta(hours=8)
    viewer.put()

    # Get profile info
    profile_owner = User.query(User.username == profile_id).get()
    profile = Profile.query(Profile.owner == profile_owner.key).get()
    if not profile:
      # If profile isn't created, instantiate
      new_profile = Profile()
      new_profile.owner = profile_owner.key
      new_profile.about_me = "I love to eat food"
      new_profile.put()

    current_date = datetime.datetime.now() - datetime.timedelta(hours=8)

    # Get profile history
    history =  Request.query(Request.start_time <= current_date, Request.sender == profile_owner.key).order(Request.start_time)

    # Get Request regarding the user
    reqs = []
    timeline_requests = []
    waiting_requests = []
    my_reqs = []
    fired_requests = []
    table_reqs = []
    pending_requests = []
    accepted_requests = []
    completed_reqs = []
    alloted_time = current_date + datetime.timedelta(minutes=20)

    # Get all requests where profile owner is foodie and expert
    available_requests = Request.query(Request.start_time >= alloted_time).order(Request.start_time)
    my_reqs = Request.query(ndb.OR(Request.sender==profile_owner.key, Request.recipient == profile_owner.key), Request.start_time >= alloted_time).order(Request.start_time).fetch()
    dead_reqs = Request.query(ndb.OR(Request.sender==profile_owner.key, Request.recipient == profile_owner.key), Request.start_time <= alloted_time).order(Request.start_time).fetch()


    # Get all pending request that user has bid on
    for request in available_requests:
      # Get all requests you didn't send
      if request.sender != profile_owner.key:
        # Request not accepted yet
        if request.recipient == None:
          # Check for bidders
          for bid in request.bidders:
            bid = bid.get()
            if bid.name == profile_owner.username:
              # Bid by user
              pending_requests.append(request)

    table_requests = my_reqs[:] + dead_reqs[:] + pending_requests[:]
    table_requests = sorted(table_requests, key=lambda x: x.start_time, reverse=True)
    waiting_requests = [x for x in table_requests if x.status == "waiting for a bid"]
    accepted_requests = [x for x in table_requests if x.status == "accepted"]
    timeline_requests = table_requests
    pending_requests = [x for x in timeline_requests if x.status == "pending"]
    pending_requests = sorted(pending_requests, key = lambda x: x.start_time, reverse=True)
    timeline_requests = [x for x in timeline_requests if x.status != "waiting for a bid"]
    timeline_requests = [x for x in timeline_requests if x.status != "pending"]
    timeline_requests = [x for x in timeline_requests if x.status != "dead"]
    timeline_requests = [x for x in timeline_requests if x.status != "accepted"]


    timeline_comments = []
    for r in timeline_requests:
      c = Endorsement.query(Endorsement.request == r.key).fetch()
      if c:
        timeline_comments.append(c)
      else:
        timeline_comments.append("None")

    timeline_requests = zip(timeline_requests, timeline_comments)
    completed_requests = [x for x in timeline_requests if x[0].status == "complete"]
    fired_requests = [x for x in timeline_requests if x[0].status == "fired"]

    self.response.out.write(template.render('views/profile.html',
                             {'owner':profile_owner, 'profile':profile, 'history': history, 'user': viewer, 'timeline_requests': timeline_requests,
                             'pending_requests': pending_requests, 'accepted_requests': accepted_requests, 'completed_requests': completed_requests,
                             'waiting_requests': waiting_requests, 'fired_requests': fired_requests}))
예제 #9
0
파일: main.py 프로젝트: Qiwis/foodie
  def get(self):
    user = self.user_model
    search = self.request.get('search').lower().strip()
    print "Search Term: ", search

    #Seach for people
    results = []
    profiles = []

    # Search for requests
    available_requests = []
    available_users = []

    completed_requests = []
    completed_users = []
    current_time = datetime.datetime.now() - datetime.timedelta(hours=8)

    # Check for type
    food_type_requests = Request.query(Request.food_type == search).fetch()
    food_type = [x for x in food_type_requests if x.start_time > current_time]
    if food_type:
      print "Type Match: "
      for match in food_type:
        sender = User.query(User.username == match.sender_name).get()
        if match.recipient != None:
          print 'STATUS: COMPLETED REQUESTS'
          print match.sender_name, "requested:", match.food_type,"for:", match.start_time, "in:", match.location
          completed_requests.append(match)
          completed_users.append(sender)
        else:
          print 'STATUS: AVAILABLE REQUESTS'
          print match.sender_name, "requested:", match.food_type,"for:", match.start_time, "in:", match.location
          available_requests.append(match)
          available_users.append(sender)

    # Location Search
    location_requests = Request.query(Request.location == search).fetch()
    locations = [x for x in location_requests if x.start_time > current_time]
    if locations:
      print "Location Match: "
      for match in locations:
        sender = User.query(User.username == match.sender_name).get()
        if match.recipient != None:
          print 'STATUS: COMPLETED REQUESTS'
          print match.sender_name, "requested:", match.food_type,"for:", match.start_time, "in:", match.location
          completed_requests.append(match)
          completed_users.append(sender)
        else:
          print 'STATUS: AVAILABLE REQUESTS'
          print match.sender_name, "requested:", match.food_type,"for:", match.start_time, "in:", match.location
          available_requests.append(match)
          available_users.append(sender)

    if ' ' in search:
      search_list = search.split(' ')
      # Full name
      print "Full name search..."
      full_name = User.query(User.l_first_name == search_list[0], User.l_last_name == search_list[1]).fetch()
      for user in full_name:
        profile = Profile.query(Profile.owner == user.key).get()
        results.append(user)
        profiles.append(profile)
    else:
      print "First, last, or username search..."
      search_names = User.query(ndb.OR(User.l_first_name == search, User.l_last_name == search, User.username == search)).fetch()
      for user in search_names:
        profile = Profile.query(Profile.owner == user.key).get()
        results.append(user)
        profiles.append(profile)

    results = zip(results, profiles)
    available = zip(available_users, available_requests)
    completed = zip(completed_users, completed_requests)
    self.response.out.write(template.render('views/search.html',
      {'user':user, 'search_results':results, 'available_requests':available, 'completed_requests':completed}))