Source code for rspub.util.defaults

#! /usr/bin/env python3
# -*- coding: utf-8 -*-
"""
:samp:`Various utility functions`

"""
import base64
import hashlib
import mimetypes
import time
import urllib.parse
import urllib.request
from datetime import datetime
from functools import partial


[docs]def sanitize_url_path(value): if value: value = urllib.parse.quote(value.replace("\\", "/")) return sanitize_string(value)
[docs]def sanitize_string(value): if (not value): value = "" return value
[docs]def w3c_datetime(i): """ given seconds since the epoch, return a dateTime string. from: https://gist.github.com/mnot/246088 """ assert type(i) in [int, float] year, month, day, hour, minute, second, wday, jday, dst = time.gmtime(i) o = str(year) if (month, day, hour, minute, second) == (1, 1, 0, 0, 0): return o o += '-%2.2d' % month if (day, hour, minute, second) == (1, 0, 0, 0): return o o += '-%2.2d' % day if (hour, minute, second) == (0, 0, 0): return o o += 'T%2.2d:%2.2d' % (hour, minute) if second != 0: o += ':%2.2d' % second o += 'Z' return o
[docs]def w3c_now(): return w3c_datetime(datetime.now().timestamp())
[docs]def md5_for_file(filename, block_size=2**14): """Compute MD5 digest for a file Optional block_size parameter controls memory used to do MD5 calculation. This should be a multiple of 128 bytes. """ with open(filename, mode='rb') as f: d = hashlib.md5() for buf in iter(partial(f.read, block_size), b''): d.update(buf) #return base64.b64encode(d.digest()).decode('utf-8') return d.hexdigest()
[docs]def mime_type(filename): """ Not too reliable mime type analyzer.""" url = urllib.request.pathname2url(filename) return mimetypes.guess_type(url)[0]