gist 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. #!/usr/bin/env python
  2. import argparse
  3. import os.path
  4. import requests
  5. import sys
  6. parser = argparse.ArgumentParser(description='paste a file to gist')
  7. parser.add_argument('filename', metavar='file', type=str, nargs='?',
  8. help='file to paste; if not specified, read from stdin')
  9. parser.add_argument('--language', '-l', dest='language',
  10. help='the language to use (default: Text if stdin, autodetect based on extension otherwise)')
  11. args = parser.parse_args()
  12. rs = requests.Session()
  13. if args.filename is None:
  14. args.filename = ''
  15. f = sys.stdin
  16. if args.language is None:
  17. args.language = 'Text'
  18. else:
  19. f = open(args.filename, 'r')
  20. args.filename = os.path.basename(args.filename)
  21. if args.language is None:
  22. r = rs.get('https://gist.github.com/languages/detect', params={'name': args.filename})
  23. if type(r.json) == dict:
  24. args.language = r.json['language'] # old requests behavior
  25. else:
  26. args.language = r.json()['language'] # new requests behavior
  27. content = f.read()
  28. data = {
  29. 'gist[description]': '',
  30. 'gist[files][][content]': content,
  31. 'gist[files][][language]': args.language,
  32. 'gist[files][][name]': args.filename,
  33. 'gist[public]': 0,
  34. 'indent': 'Tabs',
  35. }
  36. r = rs.post('https://gist.github.com/gists', data=data, allow_redirects=False)
  37. if 'location' in r.headers:
  38. print r.headers['location']
  39. else:
  40. print r.headers['status']