From 1ff6e721c7c562168839d1d029224608a5c4f28e Mon Sep 17 00:00:00 2001 From: r4sas Date: Sat, 1 Jun 2019 15:07:05 +0000 Subject: [PATCH] move functions to utils, import functions only where they needed, remove bytified json load --- pbincli/actions.py | 25 +++++++---------------- pbincli/utils.py | 49 +++++++++++++++------------------------------- 2 files changed, 23 insertions(+), 51 deletions(-) diff --git a/pbincli/actions.py b/pbincli/actions.py index 506e4be..24e8e33 100644 --- a/pbincli/actions.py +++ b/pbincli/actions.py @@ -1,27 +1,14 @@ -import json, hashlib, ntpath, os, sys, zlib +import json, hashlib, os, sys import pbincli.actions from sjcl import SJCL from base64 import b64encode, b64decode -from mimetypes import guess_type -from pbincli.utils import PBinCLIException, check_readable, check_writable, json_load_byteified - - -def path_leaf(path): - head, tail = ntpath.split(path) - return tail or ntpath.basename(head) - - -def decompress(s): - return zlib.decompress(bytearray(map(ord, b64decode(s.encode('utf-8')).decode('utf-8'))), -zlib.MAX_WBITS) - -def compress(s): - co = zlib.compressobj(wbits=-zlib.MAX_WBITS) - b = co.compress(s) + co.flush() - - return b64encode(''.join(map(chr, b)).encode('utf-8')) +from pbincli.utils import PBinCLIException def send(args, api_client): + from pbincli.utils import check_readable, compress, path_leaf + from mimetypes import guess_type + if not args.notext: if args.text: text = args.text @@ -107,6 +94,8 @@ def send(args, api_client): def get(args, api_client): + from pbincli.utils import check_writable, decompress + pasteid, passphrase = args.pasteinfo.split("#") if pasteid and passphrase: diff --git a/pbincli/utils.py b/pbincli/utils.py index bf8a5d0..534f1c0 100644 --- a/pbincli/utils.py +++ b/pbincli/utils.py @@ -1,10 +1,15 @@ -import json, os - +import json, ntpath, os, zlib +from base64 import b64encode, b64decode class PBinCLIException(Exception): pass +def path_leaf(path): + head, tail = ntpath.split(path) + return tail or ntpath.basename(head) + + def check_readable(f): # Checks if path exists and readable if not os.path.exists(f) or not os.access(f, os.R_OK): @@ -17,34 +22,12 @@ def check_writable(f): raise PBinCLIException("Path is not writable: {}".format(f)) -# http://stackoverflow.com/a/33571117 -def json_load_byteified(file_handle): - return _byteify( - json.load(file_handle, object_hook=_byteify), - ignore_dicts=True - ) - - -def json_loads_byteified(json_text): - return _byteify( - json.loads(json_text, object_hook=_byteify), - ignore_dicts=True - ) - - -def _byteify(data, ignore_dicts = False): - # if this is a unicode string, return its string representation - if isinstance(data, str): - return data.encode('utf-8') - # if this is a list of values, return list of byteified values - if isinstance(data, list): - return [ _byteify(item, ignore_dicts=True) for item in data ] - # if this is a dictionary, return dictionary of byteified keys and values - # but only if we haven't already byteified it - if isinstance(data, dict) and not ignore_dicts: - return { - _byteify(key, ignore_dicts=True): _byteify(value, ignore_dicts=True) - for key, value in data.iteritems() - } - # if it's anything else, return it in its original form - return data +def decompress(s): + return zlib.decompress(bytearray(map(ord, b64decode(s.encode('utf-8')).decode('utf-8'))), -zlib.MAX_WBITS) + + +def compress(s): + co = zlib.compressobj(wbits=-zlib.MAX_WBITS) + b = co.compress(s) + co.flush() + + return b64encode(''.join(map(chr, b)).encode('utf-8'))