Add more docstrings; Remove unused code
This commit is contained in:
parent
3be8813a0a
commit
d7cd1e9748
4 changed files with 55 additions and 31 deletions
|
@ -112,7 +112,9 @@ WARNING_ORDERBY_BADCOL = '"{column}" is not a sorting option. Ignored.'
|
|||
WARNING_ORDERBY_BADDIRECTION = 'You can\'t order "{column}" by "{direction}". Defaulting to descending.'
|
||||
|
||||
# Operational info
|
||||
EXPRESSION_OPERATORS = {'(', ')', 'OR', 'AND', 'NOT'}
|
||||
TRUTHYSTRING_TRUE = {s.lower() for s in ('1', 'true', 't', 'yes', 'y', 'on')}
|
||||
TRUTHYSTRING_NONE = {s.lower() for s in ('null', 'none')}
|
||||
|
||||
ADDITIONAL_MIMETYPES = {
|
||||
'7z': 'archive',
|
||||
'gz': 'archive',
|
||||
|
|
|
@ -55,6 +55,17 @@ def binding_filler(column_names, values, require_all=True):
|
|||
Manually aligning question marks and bindings is annoying.
|
||||
Given the table's column names and a dictionary of {column: value},
|
||||
return the question marks and the list of bindings in the right order.
|
||||
|
||||
require_all:
|
||||
If `values` does not contain one of the column names, should we raise
|
||||
an exception?
|
||||
Otherwise, that column will simply receive None.
|
||||
|
||||
Ex:
|
||||
column_names=['id', 'name', 'score'],
|
||||
values={'score': 20, 'id': '1111', 'name': 'James'}
|
||||
->
|
||||
returns ('?, ?, ?, ?', ['1111', 'James', 20])
|
||||
'''
|
||||
values = values.copy()
|
||||
for column in column_names:
|
||||
|
@ -70,6 +81,19 @@ def binding_filler(column_names, values, require_all=True):
|
|||
return (qmarks, bindings)
|
||||
|
||||
def checkerboard_image(color_1, color_2, image_size, checker_size):
|
||||
'''
|
||||
Generate a PIL Image with a checkerboard pattern.
|
||||
|
||||
color_1:
|
||||
The color starting in the top left. Either RGB tuple or a string
|
||||
that PIL understands.
|
||||
color_2:
|
||||
The alternate color
|
||||
image_size:
|
||||
Tuple of two integers, the image size in pixels.
|
||||
checker_size:
|
||||
Tuple of two integers, the size of each checker in pixels.
|
||||
'''
|
||||
image = PIL.Image.new('RGB', image_size, color_1)
|
||||
checker = PIL.Image.new('RGB', (checker_size, checker_size), color_2)
|
||||
offset = True
|
||||
|
@ -143,6 +167,9 @@ def fit_into_bounds(image_width, image_height, frame_width, frame_height):
|
|||
return (new_width, new_height)
|
||||
|
||||
def get_mimetype(filepath):
|
||||
'''
|
||||
Extension to mimetypes.guess_type which uses my constants.ADDITIONAL_MIMETYPES.
|
||||
'''
|
||||
extension = os.path.splitext(filepath)[1].replace('.', '')
|
||||
if extension in constants.ADDITIONAL_MIMETYPES:
|
||||
return constants.ADDITIONAL_MIMETYPES[extension]
|
||||
|
@ -154,7 +181,8 @@ def hyphen_range(s):
|
|||
Given a string like '1-3', return numbers (1, 3) representing lower
|
||||
and upper bounds.
|
||||
|
||||
Supports bytestring.parsebytes and hh:mm:ss format.
|
||||
Supports bytestring.parsebytes and hh:mm:ss format, for example
|
||||
'1k-2k', '10:00-20:00', '4gib-'
|
||||
'''
|
||||
s = s.strip()
|
||||
s = s.replace(' ', '')
|
||||
|
@ -280,12 +308,19 @@ def select_generator(sql, query, bindings=None):
|
|||
yield fetch
|
||||
|
||||
def truthystring(s):
|
||||
'''
|
||||
Convert strings to True, False, or None based on the options presented
|
||||
in constants.TRUTHYSTRING_TRUE, constants.TRUTHYSTRING_NONE, or False
|
||||
for all else.
|
||||
|
||||
Case insensitive.
|
||||
'''
|
||||
if isinstance(s, (bool, int)) or s is None:
|
||||
return s
|
||||
s = s.lower()
|
||||
if s in {'1', 'true', 't', 'yes', 'y', 'on'}:
|
||||
if s in constants.TRUTHYSTRING_TRUE:
|
||||
return True
|
||||
if s in {'null', 'none'}:
|
||||
if s in constants.TRUTHYSTRING_NONE:
|
||||
return None
|
||||
return False
|
||||
|
||||
|
|
|
@ -230,6 +230,14 @@ class Album(ObjectBase, GroupableMixin):
|
|||
self.photodb.commit()
|
||||
|
||||
def add_tag_to_all(self, tag, *, nested_children=True, commit=True):
|
||||
'''
|
||||
Add this tag to every photo in the album. Saves you from having to
|
||||
write the for-loop yourself.
|
||||
|
||||
nested_children:
|
||||
If True, add the tag to photos contained in sub-albums.
|
||||
Otherwise, only local photos.
|
||||
'''
|
||||
tag = self.photodb.get_tag(tag)
|
||||
if nested_children:
|
||||
photos = self.walk_photos()
|
||||
|
@ -253,6 +261,9 @@ class Album(ObjectBase, GroupableMixin):
|
|||
self.photodb.commit()
|
||||
|
||||
def edit(self, title=None, description=None, *, commit=True):
|
||||
'''
|
||||
Change the title or description. Leave None to keep current value.
|
||||
'''
|
||||
if title is None:
|
||||
title = self.title
|
||||
if description is None:
|
||||
|
@ -467,6 +478,9 @@ class Photo(ObjectBase):
|
|||
return bytestring.bytestring(self.bytes)
|
||||
|
||||
def copy_tags(self, other_photo):
|
||||
'''
|
||||
Take all of the tags owned by other_photo and apply them to this photo.
|
||||
'''
|
||||
for tag in other_photo.tags():
|
||||
self.add_tag(tag)
|
||||
|
||||
|
|
|
@ -145,33 +145,6 @@ def _helper_filenamefilter(subject, terms):
|
|||
basename = subject.lower()
|
||||
return all(term in basename for term in terms)
|
||||
|
||||
def operate(operand_stack, operator_stack):
|
||||
#print('before:', operand_stack, operator_stack)
|
||||
operator = operator_stack.pop()
|
||||
if operator == 'NOT':
|
||||
operand = operand_stack.pop()
|
||||
value = operand ^ 1
|
||||
else:
|
||||
right = operand_stack.pop()
|
||||
left = operand_stack.pop()
|
||||
if operator == 'OR':
|
||||
value = left | right
|
||||
elif operator == 'AND':
|
||||
value = left & right
|
||||
else:
|
||||
raise ValueError('werwer')
|
||||
operand_stack.append(value)
|
||||
#print('after:', operand_stack, operator_stack)
|
||||
|
||||
# def raise_no_such_thing(exception_class, thing_id=None, thing_name=None, comment=''):
|
||||
# if thing_id is not None:
|
||||
# message = 'ID: %s. %s' % (thing_id, comment)
|
||||
# elif thing_name is not None:
|
||||
# message = 'Name: %s. %s' % (thing_name, comment)
|
||||
# else:
|
||||
# message = ''
|
||||
# raise exception_class(message)
|
||||
|
||||
def searchfilter_must_may_forbid(photo_tags, tag_musts, tag_mays, tag_forbids, frozen_children):
|
||||
if tag_musts and not all(any(option in photo_tags for option in frozen_children[must]) for must in tag_musts):
|
||||
#print('Failed musts')
|
||||
|
|
Loading…
Reference in a new issue