#!/usr/bin/env python """ addtext: Add text to pads using various actions (append, prepend, etc.). Use `--noduplicate` to avoid adding the message if already present. """ from __future__ import print_function import codecs import json import sys from argparse import ArgumentParser import requests try: # python2 from urllib2 import urlopen from urllib import urlencode except ImportError: # python3 from urllib.parse import urlencode from urllib.request import urlopen def main(args): p = ArgumentParser('') p.add_argument('padid', help='the padid') p.add_argument('message', help='the text to add') p.add_argument( '--padinfo', default='.etherdump/settings.json', help='settings, default: .etherdump/settings.json' ) p.add_argument( '--noduplicate', action='store_true', help='Do not add text if already present' ) actions_group = p.add_mutually_exclusive_group() actions_group.add_argument( '--prepend', action='store_true', help='Action: prepend message to the pad' ) actions_group.add_argument( '--append', action='store_true', help='Action: append message to the pad' ) args = p.parse_args(args) with open(args.padinfo) as f: info = json.load(f) apiurl = info.get('apiurl') data = {} data['apikey'] = info['apikey'] data['padID'] = args.padid requesturl = apiurl+'getText?'+urlencode(data) resp = urlopen(requesturl).read() resp = resp.decode('utf-8') results = json.loads(resp) if results['code'] != 0 and results['data'] is None: print("Unknown pad with PadId '{}'".format(args.padid)) sys.exit(-1) message_already_present = args.message in results['data']['text'] if message_already_present and args.noduplicate: print('--noduplicate passed and message already present. Stopping.') return # Handle things like \n correctly when passing into the pad content escaped_message = codecs.decode(str(args.message), 'unicode_escape') if args.prepend: data['text'] = escaped_message + results['data']['text'] elif args.append: data['text'] = results['data']['text'] + escaped_message else: print(( 'No action specified. See `etherdump addtext ' '--help` for more information about actions.' )) sys.exit(-1) requesturl = apiurl + 'setText' results = requests.post(requesturl, data=data) results = json.loads(results.text) if results['code'] != 0: message = 'addtext: ERROR ({0}) on pad {1}: {2}' print(message.format(results['code'], args.padid, results['message'])) sys.exit(-1)