capyt 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  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='true')
  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. r = requests.delete(url, data={"token": args['delete']})
  37. print(r.text)
  38. if r.status_code != 200:
  39. exit(1)
  40. else:
  41. parameters = copy.deepcopy(args)
  42. del parameters['FILE']
  43. with fileinput.input(files=args['FILE'], openhook=hook_compressed_encoded(args['encoding'])) as f:
  44. parameters['paste'] = ''.join(f)
  45. r = requests.post(url, data=parameters)
  46. print(r.text)
  47. if r.status_code != 200:
  48. exit(1)