Source code for expfactory.utils

'''
utils.py: part of expfactory package

'''
import errno
import collections
import shutil
import json
import os
import re


try:
    from urllib2 import Request, urlopen, HTTPError
except:
    from urllib.request import urlopen, Request, HTTPError
    basestring = str

[docs]def get_installdir(): return os.path.dirname(os.path.abspath(__file__))
[docs]def find_subdirectories(basepath): ''' Return directories (and sub) starting from a base ''' directories = [] for root, dirnames, filenames in os.walk(basepath): new_directories = [d for d in dirnames if d not in directories] directories = directories + new_directories return directories
[docs]def find_directories(root,fullpath=True): ''' Return directories at one level specified by user (not recursive) ''' directories = [] for item in os.listdir(root): # Don't include hidden directories if not re.match("^[.]",item): if os.path.isdir(os.path.join(root, item)): if fullpath: directories.append(os.path.abspath(os.path.join(root, item))) else: directories.append(item) return directories
[docs]def remove_unicode_dict(input_dict): """ remove unicode keys and values from dict, encoding in utf8 """ if isinstance(input_dict, basestring): return str(input_dict) elif isinstance(input_dict, collections.Mapping): return dict(map(remove_unicode_dict, input_dict.items())) elif isinstance(input_dict, collections.Iterable): return type(input_dict)(map(remove_unicode_dict, input_dict)) else: return input_dict
[docs]def copy_directory(src, dest): """ Copy an entire directory recursively """ try: shutil.copytree(src, dest) except OSError as e: # If the error was caused because the source wasn't a directory if e.errno == errno.ENOTDIR: shutil.copy(src, dest) else: print('Directory not copied. Error: %s' % e)
[docs]def get_template(template_file): """ get_template: read in and return a template file """ filey = open(template_file,"rb") template = "".join(filey.readlines()) filey.close() return template
[docs]def sub_template(template,template_tag,substitution): """ make a substitution for a template_tag in a template """ template = template.replace(template_tag,substitution) return template
[docs]def save_template(output_file,html_snippet): filey = open(output_file,"w") filey.writelines(html_snippet) filey.close()
[docs]def save_pretty_json(outfile,myjson): filey = open(outfile,'wb') filey.write(json.dumps(myjson, sort_keys=True,indent=4, separators=(',', ': '))) filey.close()
[docs]def is_type(var,types=[int,float,list]): """ Check type """ for x in range(len(types)): if isinstance(var,types[x]): return True return False
[docs]def clean_fields(mydict): """ Ensure utf-8 """ newdict = dict() for field,value in mydict.items(): cleanfield = field.encode("utf-8") if isinstance(value,float): newdict[cleanfield] = value if isinstance(value,int): newdict[cleanfield] = value if isinstance(value,list): newlist = [] for x in value: if not is_type(x): newlist.append(x.encode("utf-8")) else: newlist.append(x) newdict[cleanfield] = newlist else: newdict[cleanfield] = value.encode("utf-8") return newdict
[docs]def get_url(url): """get_url return a url as string """ request = Request(url) response = urlopen(request) return response.read()