move functions to utils, import functions only where they needed, remove bytified json load

This commit is contained in:
R4SAS 2019-06-01 15:07:05 +00:00
parent 487def2b45
commit 1ff6e721c7
2 changed files with 20 additions and 48 deletions

View File

@ -1,27 +1,14 @@
import json, hashlib, ntpath, os, sys, zlib import json, hashlib, os, sys
import pbincli.actions import pbincli.actions
from sjcl import SJCL from sjcl import SJCL
from base64 import b64encode, b64decode from base64 import b64encode, b64decode
from mimetypes import guess_type from pbincli.utils import PBinCLIException
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'))
def send(args, api_client): def send(args, api_client):
from pbincli.utils import check_readable, compress, path_leaf
from mimetypes import guess_type
if not args.notext: if not args.notext:
if args.text: if args.text:
text = args.text text = args.text
@ -107,6 +94,8 @@ def send(args, api_client):
def get(args, api_client): def get(args, api_client):
from pbincli.utils import check_writable, decompress
pasteid, passphrase = args.pasteinfo.split("#") pasteid, passphrase = args.pasteinfo.split("#")
if pasteid and passphrase: if pasteid and passphrase:

View File

@ -1,10 +1,15 @@
import json, os import json, ntpath, os, zlib
from base64 import b64encode, b64decode
class PBinCLIException(Exception): class PBinCLIException(Exception):
pass pass
def path_leaf(path):
head, tail = ntpath.split(path)
return tail or ntpath.basename(head)
def check_readable(f): def check_readable(f):
# Checks if path exists and readable # Checks if path exists and readable
if not os.path.exists(f) or not os.access(f, os.R_OK): 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)) raise PBinCLIException("Path is not writable: {}".format(f))
# http://stackoverflow.com/a/33571117 def decompress(s):
def json_load_byteified(file_handle): return zlib.decompress(bytearray(map(ord, b64decode(s.encode('utf-8')).decode('utf-8'))), -zlib.MAX_WBITS)
return _byteify(
json.load(file_handle, object_hook=_byteify),
ignore_dicts=True
)
def json_loads_byteified(json_text): def compress(s):
return _byteify( co = zlib.compressobj(wbits=-zlib.MAX_WBITS)
json.loads(json_text, object_hook=_byteify), b = co.compress(s) + co.flush()
ignore_dicts=True
)
return b64encode(''.join(map(chr, b)).encode('utf-8'))
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