def login_view(request): try: user = User.objects.get(fb_id=request.POST['id']) if user.check_access_token(request.POST['access_token']): user.backend = 'mongoengine.django.auth.MongoEngineBackend' login(request, user) request.session.set_expiry(60 * 60 * 24 * 30) # 1 month timeout return HttpResponse(model_encode(user), mimetype="application/json") else: return HttpResponse('login failed') except DoesNotExist: data = parser.parse(request.POST.urlencode()) if not data.get('email'): data['email'] = str(data['id']) + '@facebook.com' if not data.get('username'): data['username'] = data['email'] if not data.get('bio'): data['bio'] = '' user = User( username = data['email'], name = data['name'], first_name = data['first_name'], last_name = data['last_name'], fb_id = data['id'], fb_access_token = data['access_token'], fb_link = data['link'], fb_username = data['username'], bio = data['bio'], email = data['email'], timezone = data['timezone'], locale = data['locale'], gender = data['gender'] ) imgdata = urllib2.urlopen('https://graph.facebook.com/'+str(data['id'])+'/picture?type=large') image_type,width,height = getImageInfo(imgdata) user.picture_width = width user.picture_height = height user.save() if data.get('hometown'): user.add_property('location', data['hometown'], 650) if data.get('location'): user.add_property('location', data['location'], 750) for i in range(len(data['work'])): work_score = 200 * 3/(min(i,4)+1) user.add_property('work', data['work'][i], work_score) for i in range(len(data['education'])): user.add_property('school', data['education'][i], 680*(4+i)/4) for i in range(len(data['inspirational_people'])): user.add_property('inspirational_person', data['inspirational_people'][i], 200) user.set_default_featured_properties() return HttpResponse(model_encode(user), mimetype="application/json")
def user_availability_create(request): #try: data = parser.parse(request.POST.urlencode()) user = get_current_user(request) if data.get('availability'): availability_raw = data['availability'][''] else: availability_raw = [] availability = [] if not isinstance(availability_raw, list): availability_raw = [availability_raw] for available_raw_item in availability_raw: avail_data = string.split(available_raw_item, '_') if avail_data[1] == 'morning': time_array = [16, 18, 20, 22] elif avail_data[1] == 'afternoon': time_array = [24, 26, 28, 30] elif avail_data[1] == 'night': time_array = [32, 34, 36, 38] elif avail_data[1] == 'late-night': time_array = [40, 42, 44] elif avail_data[1] == 'night-owl': time_array = [46, 48, 50] for time in time_array: availability.append({ 'day': int(avail_data[0]), 'start_time': int(time), 'end_time': int(time) + 2 }) availability_array = [] for available_slot in availability: newSlot = available_slot newSlot['start_time'] -= user.timezone * 2 newSlot['end_time'] -= user.timezone * 2 if newSlot['start_time'] < 0: newSlot['day'] = newSlot['day'] - 1 newSlot['start_time'] = 48 + newSlot['start_time'] if newSlot['end_time'] < 0: newSlot['end_time'] = 48 + newSlot['end_time'] if newSlot['start_time'] > 47: newSlot['start_time'] = newSlot['start_time'] - 48 newSlot['day'] = newSlot['day'] + 1 if newSlot['end_time'] > 47: newSlot['end_time'] = newSlot['end_time'] - 48 if newSlot['day'] < 0: newSlot['day'] = 7 + newSlot['day'] if newSlot['day'] > 6: newSlot['day'] = newSlot['day'] - 7 avail_document = UserAvailability( day = newSlot['day'], start_time = newSlot['start_time'], end_time = newSlot['end_time'] ) availability_array.append(avail_document) user.availability = availability_array user.save() return HttpResponse(model_encode(user.availability_tz()), mimetype="application/json")
def chats_upcoming(request): try: cuser = get_current_user(request) chats = Chat.objects( Q(user_from=cuser) | Q(user_to=cuser) ).order_by('-start_datetime').limit(3) return HttpResponse(model_encode(chats), mimetype="application/json") except DoesNotExist: return HttpResponse([])
def render_with_layout(self, layout, page, pageVars, options, request): backboneTemplates = self.get_backbone_templates(options['withBackboneTemplates']) c = { 'innerBlock': pyRenderer.render_path('app/templates/'+page+'.mustache', pageVars), 'javascriptBlock': javascript, 'STATIC_URL': settings.STATIC_URL } c.update(csrf(request)) try: user = get_current_user(request) user.availability = user.availability_tz() if user: c['currentUser'] = model_encode(user) except Exception: c['currentUser'] = '******' return pyRenderer.render_path('app/templates/'+layout+'.mustache', c) + backboneTemplates
def requests_create(request): try: data = parser.parse(request.POST.urlencode()) if not data.get('times'): return HttpResponse('Missing times') if not data.get('user_id'): return HttpResponse('Missing User Id') if not data.get('message'): return HttpResponse('Missing message') times = data['times'][''] returnArray = [] user = get_current_user(request) user2 = User.objects(id=data['user_id'])[0] for time in times: r = ChatRequest( request_from = user, request_to = user2, start_datetime = datetime.datetime.utcfromtimestamp(time/1000), end_datetime = datetime.datetime.utcfromtimestamp(time/1000) + datetime.timedelta(minutes=30), message = request.POST['message'] ) r.save() returnArray.append(r) user.requests_out = user.requests_out + returnArray; user2.requests_in = user.requests_in + returnArray; user.save() user2.save() return HttpResponse(model_encode(returnArray)) except DoesNotExist: return HttpResponse('Users not found')
def feed(request): try: users = User.objects return HttpResponse(model_encode(users), mimetype="application/json") except DoesNotExist: return HttpResponse('Cannot get your feed. Sorry!')
def user_open_schedule(request,uid): #try: returnArray = [] user = User.objects(id=uid)[0] current_user = get_current_user(request) today = datetime.datetime.utcnow() # Get all chats schedule by both users. Throw out times that overlap chats_this_week = [] chats_this_week.extend(user.chats_this_week()) chats_this_week.extend(current_user.chats_this_week()) # Get current users outgoing requests. Do not allow double requests at # a time c_user_out_requests = current_user.outgoing_requests_this_week() # Get current users incoming requests. Add as meta data so users do not # double book. c_user_in_requests = current_user.incoming_requests_this_week() # Get target users incoming requests. Add as meta data to show how # competitive a certain time spot is. user_in_requests = user.incoming_requests_this_week() # Get target users outgoing requests. Do not allow users to stack # these as it may lead to a confusing cycle. user_out_requests = user.outgoing_requests_this_week() # Get next 7 days availability times as datetime UTC objects user_availability = user.availability_this_week() # Move through all the users' usually available slots and find the # times that will actually work this week. for available_slot in user_availability: addMeta = True additionalMetaData = { 'time': available_slot, 'time_slot_competition': 0, 'request_overlap': [] } for chat in chats_this_week: if chat.start_datetime == available_slot: addMeta = False for chat_request in c_user_out_requests: if chat_request.start_datetime == available_slot: addMeta = False for chat_request in user_out_requests: if chat_request.start_datetime == available_slot: addMeta = False for chat_request in c_user_in_requests: if chat_request.start_datetime == available_slot: additionalMetaData['request_overlap'].append(chat_request) for chat_request in user_in_requests: if chat_request.start_datetime == available_slot: additionalMetaData['time_slot_competition'] += 1 if addMeta: returnArray.append(additionalMetaData) return HttpResponse(model_encode(returnArray))