Minor improvements to other helpers and their docstrings.

This commit is contained in:
voussoir 2017-12-07 21:32:37 -08:00
parent 0d0354f4da
commit f39717c216

View file

@ -3,6 +3,7 @@ import math
import mimetypes
import os
import PIL.Image
import unicodedata
from . import constants
from . import exceptions
@ -65,7 +66,7 @@ def binding_filler(column_names, values, require_all=True):
column_names=['id', 'name', 'score'],
values={'score': 20, 'id': '1111', 'name': 'James'}
->
returns ('?, ?, ?, ?', ['1111', 'James', 20])
returns ('?, ?, ?', ['1111', 'James', 20])
'''
values = values.copy()
for column in column_names:
@ -145,7 +146,7 @@ def dict_to_params(d):
'''
Given a dictionary of URL parameters, return a URL parameter string.
{'a':1, 'b':2} => ?a=1&b=2
{'a':1, 'b':2} -> '?a=1&b=2'
'''
if not d:
return ''
@ -160,6 +161,8 @@ def fit_into_bounds(image_width, image_height, frame_width, frame_height):
Given the w+h of the image and the w+h of the frame,
return new w+h that fits the image into the frame
while maintaining the aspect ratio.
(1920, 1080, 400, 400) -> (400, 225)
'''
ratio = min(frame_width/image_width, frame_height/image_height)
@ -174,8 +177,8 @@ def get_mimetype(filepath):
constants.ADDITIONAL_MIMETYPES.
'''
extension = os.path.splitext(filepath)[1].replace('.', '')
if extension in constants.ADDITIONAL_MIMETYPES:
return constants.ADDITIONAL_MIMETYPES[extension]
mimetype = constants.ADDITIONAL_MIMETYPES.get(extension, None)
if mimetype is None:
mimetype = mimetypes.guess_type(filepath)[0]
return mimetype
@ -318,12 +321,13 @@ def remove_characters(text, characters):
def remove_control_characters(text):
'''
Thanks SilentGhost
http://stackoverflow.com/a/4324823
Alex Quinn
https://stackoverflow.com/a/19016117
unicodedata.category(character) returns some two-character string
where if [0] is a C then the character is a control character.
'''
translator = dict.fromkeys(range(32))
text = text.translate(translator)
return text
return ''.join(c for c in text if unicodedata.category(c)[0] != 'C')
def seconds_to_hms(seconds):
'''
@ -343,6 +347,9 @@ def seconds_to_hms(seconds):
return hms
def select_generator(sql, query, bindings=None):
'''
Perform the query, and yield the results.
'''
bindings = bindings or []
cursor = sql.cursor()
cursor.execute(query, bindings)
@ -353,6 +360,11 @@ def select_generator(sql, query, bindings=None):
yield fetch
def sql_listify(items):
'''
Given a list of strings, return a string in the form of an SQL list.
['hi', 'ho', 'hey'] -> '("hi", "ho", "hey")'
'''
return '(%s)' % ', '.join('"%s"' % item for item in items)
def truthystring(s):
@ -373,6 +385,7 @@ def truthystring(s):
return False
_numerical_characters = set('0123456789.')
def _unitconvert(value):
'''
When parsing hyphenated ranges, this function is used to convert
@ -382,7 +395,7 @@ def _unitconvert(value):
return None
if ':' in value:
return hms_to_seconds(value)
elif all(c in '0123456789.' for c in value):
elif all(c in _numerical_characters for c in value):
return float(value)
else:
return bytestring.parsebytes(value)