support batch operations from cli
This commit is contained in:
parent
253f29992e
commit
9b30755430
|
@ -60,18 +60,28 @@ def main():
|
||||||
spr_del = spr_action.add_parser("del", help="delete a paste")
|
spr_del = spr_action.add_parser("del", help="delete a paste")
|
||||||
spr_del.add_argument("name", help="name of paste to delete")
|
spr_del.add_argument("name", help="name of paste to delete")
|
||||||
|
|
||||||
|
# batch operations
|
||||||
|
spr_batch = spr_action.add_parser("batch", help="batch operations")
|
||||||
|
spr_batch_action = spr_batch.add_subparsers(dest="batchaction", help="action to take")
|
||||||
|
|
||||||
|
spr_import = spr_batch_action.add_parser("import", help="import many text files to pastes")
|
||||||
|
spr_import.add_argument("files", nargs="+", help="name of paste to get")
|
||||||
|
|
||||||
|
spr_export = spr_batch_action.add_parser("export", help="export pastes to many text files")
|
||||||
|
spr_export.add_argument("dir", help="directory to write files")
|
||||||
|
|
||||||
args = parser.parse_args()
|
args = parser.parse_args()
|
||||||
r = requests.session()
|
sess = requests.session()
|
||||||
|
|
||||||
host = args.host.rstrip("/") + "/"
|
host = args.host.rstrip("/") + "/"
|
||||||
|
|
||||||
def getpaste(name):
|
def getpaste(name):
|
||||||
req = r.get(host + name)
|
req = sess.get(host + name)
|
||||||
req.raise_for_status()
|
req.raise_for_status()
|
||||||
return req.text
|
return req.text
|
||||||
|
|
||||||
def putpaste(name, body):
|
def putpaste(name, body):
|
||||||
return r.post(host + "make", data={"name": name, "contents": body})
|
return sess.post(host + "make", data={"name": name, "contents": body})
|
||||||
|
|
||||||
if args.action == "get":
|
if args.action == "get":
|
||||||
print(getpaste(args.name), end="")
|
print(getpaste(args.name), end="")
|
||||||
|
@ -92,13 +102,35 @@ def main():
|
||||||
print(r.url)
|
print(r.url)
|
||||||
|
|
||||||
elif args.action == "del":
|
elif args.action == "del":
|
||||||
r.delete(host + args.name).raise_for_status()
|
sess.delete(host + args.name).raise_for_status()
|
||||||
|
|
||||||
elif args.action == "list":
|
elif args.action == "list":
|
||||||
print(r.get(host + "search",
|
print(sess.get(host + "search",
|
||||||
params={"prefix": args.name} if args.name else None).text,
|
params={"prefix": args.name} if args.name else None).text,
|
||||||
end="")
|
end="")
|
||||||
|
|
||||||
|
elif args.action == "batch":
|
||||||
|
if args.batchaction == "import":
|
||||||
|
for fpath in args.files:
|
||||||
|
pastename = os.path.basename(fpath)
|
||||||
|
if pastename.endswith(".txt"):
|
||||||
|
pastename = pastename[0:-4]
|
||||||
|
with open(fpath) as f:
|
||||||
|
content = f.read()
|
||||||
|
r = putpaste(pastename, content)
|
||||||
|
r.raise_for_status()
|
||||||
|
print(r.url)
|
||||||
|
elif args.batchaction == "export":
|
||||||
|
os.makedirs(args.dir, exist_ok=True)
|
||||||
|
for name in sess.get(host + "search").text.split("\n"):
|
||||||
|
if not name:
|
||||||
|
continue
|
||||||
|
outfile = os.path.join(args.dir, f"{name}.txt")
|
||||||
|
with open(outfile, "w") as f: # TODO validate name doesnt have slashes and whatnot
|
||||||
|
f.write(getpaste(name))
|
||||||
|
print(outfile)
|
||||||
|
else:
|
||||||
|
parser.error('must specify an action')
|
||||||
else:
|
else:
|
||||||
parser.error('must specify an action')
|
parser.error('must specify an action')
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue