def single(request, username, year, month, day, comment_form=None): """View a diary page of the user with username. Finds a diary entry by using the year month and day of it. If those fields are not specified, uses the current date. """ user = get_object_or_404(User, username=username) if user != request.user and not request.user.is_active: next_url = urlparams(reverse('users.inactive'), next=request.path) return HttpResponseRedirect(next_url) get_users_and_visits(user, request.user) c_year, c_month = clean_diary_date(year, month) c_day = smart_int(day) entries = user.diaries.get_for_month(visitor=request.user, creator=user, year=c_year, month=c_month) calendar_data = get_diary_calendar(entries, c_year, c_month) if c_day not in calendar_data['days_with_entries']: url = reverse('diary.list_all', args=[user.username]) return HttpResponseRedirect(url) entry = calendar_data['days_with_entries'][c_day] if not comment_form: comment_form = CommentForm(creator=request.user, diary=entry) data = {'entry': entry, 'calendar_data': calendar_data, 'comments': entry.comments.order_by('created'), 'diary': DiaryForm(creator=entry.creator, instance=entry), 'comment_form': comment_form, 'creator': user} return jingo.render(request, 'diary/single.html', data)
def get_relevant_lets(user, category=None, page=1, per_page=lcs.LETS_PER_PAGE): lc = LetsClient() page = smart_int(page, 1) # Continue with search filters = [] category = clean_category(category) if category: filters.append({ 'filter': 'category', 'value': [category], }) gender = user.profile.looking_sex if gender == LOOKING_SEX_3: gender = None if gender: filters.append({ 'filter': 'gender', 'value': [gender], }) filters.append({ 'filter': 'country', 'value': [lc.str_to_int('US')], }) filters.append({ 'filter': 'state', 'value': [lc.str_to_int('CA')], }) filters.append({ 'filter': 'creator_id', 'value': get_blocked_uids(user), 'exclude': True, }) try: lc.set_sort_mode(scs.S_LETS_SPH[0], scs.S_LETS_SPH[1]) lets = lc.query('', filters) except SearchError: lets = Lets.objects.exclude(creator=user) if category: lets = lets.filter(category=category) return {'results': lets, 'ids': lets} lets_ids = [] offset = (page - 1) * per_page for i in range(offset, offset + lcs.LETS_PER_PAGE): try: lets_ids.append(lets[i]['id']) except IndexError: break results = Lets.objects.select_related('creator').filter(pk__in=lets_ids) return {'results': sorted(results, key=lambda r: lets_ids.index(r.pk)), 'ids': lets}
def clean_diary_date(year=None, month=None): """For a year and a month, return valid year/month.""" today = datetime.today() year = smart_int(year) or today.year month = smart_int(month) or today.month return year, max(min(month, 12), 1)
def clean_category(category): category = smart_int(category) if category not in lcs.CATEGORIES.keys(): return None return category