from __future__ import print_function
import argparse
import code
import pprint
from py_helpers.json_rpc import JsonRpc
class CrudApi(JsonRpc):
def create_artifacts(self, params):
payload = {
'method': 'CreateArtifacts',
'params': params,
}
return self.put(self.address, json=payload)
def read_artifacts(self, params=None):
payload = {
'method': 'ReadArtifacts',
'params': params,
}
r = self.put(self.address, json=payload)
r.raise_for_status()
return r.json()
def update_artifacts(self, params):
payload = {
'method': 'UpdateArtifacts',
'params': params,
}
return self.put(self.address, json=payload)
def delete_artifacts(self, params):
payload = {
'method': 'DeleteArtifacts',
'params': params,
}
return self.put(self.address, json=payload)
def parse_args(args=None):
parser = argparse.ArgumentParser()
parser.add_argument(
'address', nargs='?',
default="http://127.0.0.1:5373", help='address of artifact server')
parser.add_argument(
'-i', '--interactive',
help='open python shell to interact with the server',
action='store_true')
return parser.parse_args(args=args)
def readline_setup(exports):
try:
import readline
except ImportError:
readline = None
return False
else:
import rlcompleter
readline.set_completer(
rlcompleter.Completer(namespace=exports).complete)
return True
def start_interactive(api):
pp = pprint.pprint
create = api.create_artifacts
read = api.read_artifacts
update = api.update_artifacts
delete = api.delete_artifacts
local = locals()
exports = globals().copy()
exports.update(local)
readline_setup(exports)
code.interact(banner=__doc__, local=local)
def main():
args = parse_args()
api = CrudApi(args.address)
if args.interactive:
start_interactive(api)
else:
raise NotImplementedError('sorry, the rest is not implemented, yet')
if __name__ == '__main__':
main()