text: import json
  import py
  
  issues_url = "https://api.github.com/repos/pytest-dev/pytest/issues"
  
  import requests
  
  
  def get_issues():
      issues = []
      url = issues_url
      while 1:
          get_data = {"state": "all"}
          r = requests.get(url, params=get_data)
          data = r.json()
          if r.status_code == 403:
              # API request limit exceeded
              print(data['message'])
              exit(1)
          issues.extend(data)
  
          # Look for next page
          links = requests.utils.parse_header_links(r.headers['Link'])
          another_page = False
          for link in links:
              if link['rel'] == 'next':
                  url = link['url']
                  another_page = True
          if not another_page:
              return issues
  
  
  def main(args):
      cachefile = py.path.local(args.cache)
      if not cachefile.exists() or args.refresh:
          issues = get_issues()
          cachefile.write(json.dumps(issues))
      else:
          issues = json.loads(cachefile.read())
  
      open_issues = [x for x in issues if x["state"] == "open"]
  
      open_issues.sort(key=lambda x: x["number"])
      report(open_issues)
  
  
  def _get_kind(issue):
      labels = [l['name'] for l in issue['labels']]
      for key in ('bug', 'enhancement', 'proposal'):
          if key in labels:
              return key
      return 'issue'
  
  
  def report(issues):
      for issue in issues:
          title = issue["title"]
          body = issue["body"]
          kind = _get_kind(issue)
          status = issue["state"]
          number = issue["number"]
          link = "https://github.com/pytest-dev/pytest/issues/%s/" % number
          print("----")
          print(status, kind, link)
          print(title)
          #print()
          #lines = body.split("\n")
          #print ("\n".join(lines[:3]))
          #if len(lines) > 3 or len(body) > 240:
          #    print ("...")
      print("\n\nFound %s open issues" % len(issues))
  
  
  if __name__ == "__main__":
      import argparse
      parser = argparse.ArgumentParser("process bitbucket issues")
      parser.add_argument("--refresh", action="store_true",
                          help="invalidate cache, refresh issues")
      parser.add_argument("--cache", action="store", default="issues.json",
                          help="cache file")
      args = parser.parse_args()
      main(args)
  
  