def feedback_recently(request, page=None): if page is None: page = request.META['PATH_INFO'] query = Feedback.all() if page != 'all': query.filter('page', page) query.order('-submitted') return render_query(request, query, 20 if page == 'all' else 10)
def feedback_popular(request, page=None): if page is None: page = request.META['PATH_INFO'] feedback_list = [] query = Feedback.all() if page != 'all': query.filter('page', page) query.order('-points') query.order('-submitted') return render_query(request, query, 20 if page == 'all' else 10)
def feedback_recently(request): page = request.META["PATH_INFO"] feedback_list = [] for feedback in Feedback.all().filter("page", page).order("-points").order("-submitted"): try: submitter = feedback.submitter # Attempt to dereference. feedback_list.append(feedback) except datastore_errors.Error: pass # Ignore feedback if the submitter doesn't exist. feedback_list already_voted = get_already_voted(request) return render_to_string("feedback/messages.html", locals())
def index(request): """ Check reminders and tags for consistency. """ if (request.META.get('HTTP_X_APPENGINE_CRON', '') != 'true' and not request.user.is_staff): return HttpResponseRedirect('/accounts/login/?next=/consistency/') # Get all tags and suggestions from the datastore. tag_dict = dict((tag.key().name(), tag) for tag in Tag.all()) suggestion_dict = dict((suggestion.key().name(), suggestion) for suggestion in Reminder.all().filter('owner', None)) # Initialize empty problems dict. problems = dict((problem, []) for problem in PROBLEM_MESSAGES) # Check all tags. for tag_key, tag in tag_dict.items(): if tag.count != len(tag.suggestions): problems['tag_count'].append( (tag, tag.count, len(tag.suggestions))) elif tag.count == 0: problems['tag_empty'].append((tag, )) oldest = None for suggestion_key in tag.suggestions: if tag.suggestions.count(suggestion_key) > 1: problems['tag_suggestion_duplicate'].append( (tag, tag.suggestions.count(suggestion_key), suggestion_key)) if suggestion_key not in suggestion_dict: problems['tag_suggestion_missing'].append( (tag, suggestion_key)) continue suggestion = suggestion_dict[suggestion_key] if tag.key().name() not in suggestion.tags: problems['tag_suggestion_reverse'].append((tag, suggestion)) if oldest is None or suggestion.created < oldest.created: oldest = suggestion if oldest: if tag.created is None: problems['tag_created_none'].append((tag, oldest)) elif tag.created > oldest.created: problems['tag_created_later'].append((tag, oldest)) # Check all suggestions. for suggestion_key, suggestion in suggestion_dict.items(): for tag_key in suggestion.tags: if tag_key not in tag_dict: problems['suggestion_tag_missing'].append( (suggestion, tag_key)) continue tag = tag_dict[tag_key] if suggestion.key().name() not in tag.suggestions: problems['suggestion_tag_reverse'].append((suggestion, tag)) # Check all feedback submitters. for feedback in Feedback.all().filter('submitter !=', None): try: submitter = feedback.submitter # Attempt to dereference. except datastore_errors.Error: problems['feedback_submitter'].append((feedback, request.user)) # Check all reminders. for reminder in Reminder.all().filter('owner !=', None): try: owner = reminder.owner # Attempt to dereference. except datastore_errors.Error: problems['reminder_owner'].append((reminder, request.user)) # Remove empty problem sections. for problem in PROBLEM_MESSAGES: if not problems[problem]: assert problems.pop(problem) == [] # Return plain-text summary if cron is calling, development test with: # curl --header "X-AppEngine-Cron: true" http://localhost:8000/consistency/ if request.META.get('HTTP_X_APPENGINE_CRON', '') == 'true': message = [] for problem in problems: message.append(PROBLEM_HEADLINES[problem].rstrip('.') + ':') for data in problems[problem]: message.append("* " + format_problem(problem, data)) message.append('') if not message: message.append("No problems found.") message.append('') message.append('http://www.minderbot.com/consistency/') message.append('') message = '\n'.join(message) if problems: if request.META.get('HTTP_USER_AGENT', '') != 'django.test.Client': logging.error(message) mail_admins('Consistency check found problems', message, fail_silently=True) return HttpResponse(message, mimetype="text/plain") # Fix inconsistencies if admin clicked one of the buttons. if request.user.is_staff: for problem in problems: if problems[problem] and problem in request.POST: func = getattr(repair, problem) assert callable(func) for item in problems[problem]: func(*item) return HttpResponseRedirect(request.path) # Collect errors and remove sections without problems. consistency_results = [] for problem in problems: consistency_results.append( (problem, PROBLEM_HEADLINES[problem], [format_problem(problem, item) for item in problems[problem]], PROBLEM_BUTTONS[problem])) consistency_results.sort() return render_to_response(request, 'consistency/index.html', locals())