capyt 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. #!/usr/bin/env python3
  2. import requests
  3. import sys, fileinput, argparse, copy
  4. from urllib.parse import urlparse
  5. from os.path import splitext
  6. url = 'https://cpy.pt/'
  7. parser = argparse.ArgumentParser(description="CLI Utility to interact with pastething")
  8. parser.add_argument('-d', '--delete', help="Delete paste with supplied delete token")
  9. parser.add_argument('-b', '--burn', type=int, help="Maximum number of paste views before deletion")
  10. parser.add_argument('-l', '--lexer', help="Lexer to use (pygments get_lexer_by_name)", default="auto")
  11. parser.add_argument('-t', '--ttl', type=float, help="Time in hours before paste expires", default=1.0)
  12. parser.add_argument('-r', '--raw', help="Weather to have pastebin return raw or html paste url", default='false')
  13. parser.add_argument('-e', '--encoding', help="Define file encoding for given file (default: utf-8)")
  14. parser.add_argument('FILE', help="Files to upload", nargs="+") #Re-used as paste ID or URL when deleting
  15. args = vars(parser.parse_args())
  16. #add encoding option to compressed hook
  17. def hook_compressed_encoded(encoding):
  18. def hook_compressed(filename, mode):
  19. ext = splitext(filename)[1]
  20. if ext == '.gz':
  21. import gzip
  22. return gzip.open(filename, mode, encoding=encoding)
  23. elif ext == '.bz2':
  24. import bz2
  25. return bz2.BZ2File(filename, mode, encoding=encoding)
  26. else:
  27. return open(filename, mode, encoding=encoding)
  28. return hook_compressed
  29. if args['delete']:
  30. paste = urlparse(args['FILE'][0])
  31. if paste[0] != '':
  32. url = args['FILE'][0]
  33. else:
  34. url = url + paste[2]
  35. print("DELETE ", url)
  36. try:
  37. r = requests.delete(url, data={"token": args['delete']})
  38. print(r.text)
  39. if r.status_code != 200:
  40. exit(1)
  41. except requests.ConnectionError:
  42. print("Connection to host failed")
  43. exit(2)
  44. else:
  45. parameters = copy.deepcopy(args)
  46. del parameters['FILE']
  47. with fileinput.input(files=args['FILE'], openhook=hook_compressed_encoded(args['encoding'])) as f:
  48. parameters['paste'] = ''.join(f)
  49. try:
  50. r = requests.post(url, data=parameters)
  51. print(r.text)
  52. if r.status_code != 200:
  53. exit(1)
  54. except requests.ConnectionError:
  55. print("Connection to host failed")
  56. exit(2)