from datetime import datetime from flask import current_app as app try: from urllib.request import pathname2url from urllib.request import urlparse except ImportError: from urllib import pathname2url from urlparse import urlparse try: from werkzeug.utils import secure_filename except ImportError: pass # String handling etc def bool_short(var): if type(var) == bool: if var: return "Y" else: return "N" return var def file_date_human(num): return datetime.fromtimestamp( num ).strftime(app.config['DATE_FORMAT']) def file_size_human(num, HTML = True): space = ' ' if HTML else ' ' for x in [space + 'B', 'KB', 'MB', 'GB', 'TB']: if num < 1024.0: if x == space + 'B': return "%d%s%s" % (num, space, x) return "%3.1f%s%s" % (num, space, x) num /= 1024.0 def file_size_MB(num): return "{:,.2f}".format(num/(1024*1024)) def get_or_none(key,d,none = None): if key in d: return d[key] else: return none def is_path_safe(path): if path.startswith("."): return False if "/." in path: return False return True def is_valid_url(url, qualifying = None): min_attributes = ('scheme', 'netloc') qualifying = min_attributes if qualifying is None else qualifying token = urlparse(url) return all([getattr(token, qualifying_attr) for qualifying_attr in qualifying]) def path2url(path): return pathname2url(path) def safe_name(s): return safe_string(s, "-_") def safe_path(s): return safe_string(s, "-_/") def safe_string(s, valid, no_repeat = False): """ return a safe string, replace non alnum characters with _ . all characters in valid are considered valid. """ safe = "".join([c if c.isalnum() or c in valid else "_" for c in s]) if no_repeat: safe = re.sub(r'_+', '_', safe) return safe