index.py 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. import json
  2. import requests
  3. from requests.exceptions import RequestException
  4. from django.http import Http404, JsonResponse
  5. from django.utils.translation import ugettext as _
  6. from misago import __version__
  7. from misago.core.cache import cache
  8. from misago.threads.models import Post, Thread
  9. from misago.users.models import ACTIVATION_REQUIRED_NONE, User
  10. from . import render
  11. VERSION_CHECK_CACHE_KEY = "misago_version_check"
  12. def admin_index(request):
  13. inactive_users = {'requires_activation__gt': ACTIVATION_REQUIRED_NONE}
  14. db_stats = {
  15. 'threads': Thread.objects.count(),
  16. 'posts': Post.objects.count(),
  17. 'users': User.objects.count(),
  18. 'inactive_users': User.objects.filter(**inactive_users).count()
  19. }
  20. return render(request, 'misago/admin/index.html', {
  21. 'db_stats': db_stats,
  22. 'version_check': cache.get(VERSION_CHECK_CACHE_KEY)
  23. })
  24. def check_version(request):
  25. if request.method != "POST":
  26. raise Http404()
  27. version = cache.get(VERSION_CHECK_CACHE_KEY, 'nada')
  28. if version == 'nada':
  29. try:
  30. api_url = 'https://api.github.com/repos/rafalp/Misago/releases'
  31. r = requests.get(api_url)
  32. if r.status_code != requests.codes.ok:
  33. r.raise_for_status()
  34. latest_version = json.loads(r.content)[0]['tag_name']
  35. latest = [int(v) for v in latest_version.split(".")]
  36. current = [int(v) for v in __version__.split(".")]
  37. for i in xrange(3):
  38. if latest[i] > current[i]:
  39. message = _("Outdated: %(current)s < %(latest)s")
  40. formats = {
  41. 'latest': latest_version,
  42. 'current': __version__
  43. }
  44. version = {
  45. 'is_error': True,
  46. 'message': message % formats
  47. }
  48. break
  49. else:
  50. formats = {'current': __version__}
  51. version = {
  52. 'is_error': False,
  53. 'message': _("Up to date! (%(current)s)") % formats,
  54. }
  55. cache.set(VERSION_CHECK_CACHE_KEY, version, 180)
  56. except (RequestException, IndexError, KeyError, ValueError):
  57. message = _("Failed to connect to GitHub API. Try again later.")
  58. version = {
  59. 'is_error': True,
  60. 'message': message
  61. }
  62. return JsonResponse(version)