You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
AQuery/proctool.py

68 lines
2.0 KiB

import struct
import readline
from typing import List
name : str = input('Filename (in path ./procedures/<filename>.aqp):')
def write():
s : str = input('Enter queries: empty line to stop. \n')
qs : List[str] = []
while(len(s) and not s.startswith('S')):
qs.append(s)
s = input()
ms : int = int(input('number of modules:'))
with open(f'./procedures/{name}.aqp', 'wb') as fp:
fp.write(struct.pack("I", len(qs) + (ms > 0)))
fp.write(struct.pack("I", ms))
if (ms > 0):
fp.write(b'N\x00')
for q in qs:
fp.write(q.encode('utf-8'))
if q.startswith('Q'):
fp.write(b'\n ')
2 years ago
fp.write(b'\x00')
def read(cmd : str):
rc = len(cmd) > 1 and cmd[1] == 'c'
clip = ''
with open(f'./procedures/{name}.aqp', 'rb') as fp:
nq = struct.unpack("I", fp.read(4))[0]
ms = struct.unpack("I", fp.read(4))[0]
qs = fp.read().split(b'\x00')
print(f'Procedure {name}, {nq} queries, {ms} modules:')
for q in qs:
q = q.decode('utf-8').strip()
if q:
q = f'"{q}",' if rc else f'\t{q}'
print(q)
clip += q + '\n'
if rc and not input('copy to clipboard?').lower().startswith('n'):
import pyperclip
2 years ago
pyperclip.copy(clip)
if __name__ == '__main__':
2 years ago
import os
files = os.listdir('./procedures/')
while True:
cmd = input("r for read, rc to read c_str, w for write: ")
2 years ago
if cmd.lower().startswith('ra'):
for f in files:
if f.endswith('.aqp'):
name = f[:-4]
read('r')
input('press any key to continue')
elif cmd.lower().startswith('r'):
read(cmd.lower())
break
elif cmd.lower().startswith('w'):
2 years ago
write()
break
elif cmd.lower().startswith('q'):
break