PageRenderTime 53ms CodeModel.GetById 24ms RepoModel.GetById 0ms app.codeStats 0ms

/check.py

http://github.com/pinax/pinax
Python | 112 lines | 97 code | 8 blank | 7 comment | 16 complexity | 7314f1f508ab7c29de2be1bcd2e9cab9 MD5 | raw file
  1. """
  2. Requires:
  3. Python 3
  4. github3.py==1.0.0a4
  5. semver==2.6.0
  6. tabulate==0.7.5
  7. """
  8. import functools
  9. import json
  10. import sys
  11. import github3
  12. import semver
  13. from tabulate import tabulate
  14. app_repos = set([
  15. "atom-format",
  16. "django-bookmarks",
  17. "django-flag",
  18. "django-forms-bootstrap",
  19. "django-friends",
  20. "django-mailer",
  21. "django-user-accounts",
  22. "pinax-announcements",
  23. "pinax-api",
  24. "pinax-blog",
  25. "pinax-boxes",
  26. "pinax-calendars",
  27. "pinax-cart",
  28. "pinax-cohorts",
  29. "pinax-comments",
  30. "pinax-documents",
  31. "pinax-eventlog",
  32. "pinax-events",
  33. "pinax-forums",
  34. "pinax-identity",
  35. "pinax-images",
  36. "pinax-invitations",
  37. "pinax-likes",
  38. "pinax-lms-activities",
  39. "pinax-messages",
  40. "pinax-models",
  41. "pinax-news",
  42. "pinax-notifications",
  43. "pinax-pages",
  44. "pinax-phone-confirmation",
  45. "pinax-points",
  46. "pinax-ratings",
  47. "pinax-referrals",
  48. "pinax-stripe",
  49. "pinax-submissions",
  50. "pinax-teams",
  51. "pinax-testimonials",
  52. "pinax-types",
  53. "pinax-waitinglist",
  54. "pinax-webanalytics",
  55. "pinax-wiki"
  56. ])
  57. distributions = json.loads(open("distributions.json").read())
  58. versions = list(distributions.keys())
  59. versions.sort()
  60. latest = versions[-1]
  61. latest_post = "post-{}".format(latest)
  62. distro_repos = list(distributions[latest]["apps"].keys())
  63. gh = github3.login(sys.argv[1], token=sys.argv[2].strip())
  64. repos = []
  65. pinax = gh.organization("pinax")
  66. for repo in pinax.repositories():
  67. if repo.name in app_repos:
  68. tags = list(repo.tags())
  69. versions = {}
  70. for tag in tags:
  71. if tag.name.startswith("v"):
  72. tag_name = tag.name[1:]
  73. else:
  74. tag_name = tag.name
  75. try:
  76. semver.parse(tag_name)
  77. except ValueError:
  78. continue
  79. versions[tag_name] = tag
  80. if len(versions) == 0:
  81. continue
  82. version = sorted(versions.keys(), reverse=True, key=functools.cmp_to_key(semver.compare))[0] # noqa
  83. tagged_sha = versions[version].commit["sha"]
  84. tagged_commit = repo.commit(tagged_sha)
  85. since = [
  86. commit
  87. for commit in list(repo.commits(sha="master", since=tagged_commit.commit.author["date"])) # noqa
  88. if commit.sha != tagged_sha
  89. ]
  90. triaged_latest = sum([m.open_issues for m in repo.milestones() if m.title == latest]) # noqa
  91. triaged_post = sum([m.open_issues for m in repo.milestones() if m.title == latest_post]) # noqa
  92. repos.append([
  93. u"\u2713" if repo.name in distro_repos else "",
  94. repo.name,
  95. version,
  96. len(since) or "",
  97. triaged_latest or "",
  98. triaged_post or "",
  99. (repo.open_issues_count - triaged_latest - triaged_post) or ""
  100. ])
  101. repos = sorted(repos, key=lambda x: (x[0], x[1]))
  102. headers = ["ship", "repo", "latest", "commits", latest, latest_post, "to triage"] # noqa
  103. print(tabulate(repos, headers))