Add some type annotations to test the waters.

master
voussoir 2021-08-22 20:48:34 -07:00
parent 98ee6e82c6
commit d3a1578cca
No known key found for this signature in database
GPG Key ID: 5F7554F8C26DACCB
7 changed files with 23 additions and 23 deletions

View File

@ -25,7 +25,7 @@ class Backoff:
raise ValueError(f'max must be positive, not {max}.') raise ValueError(f'max must be positive, not {max}.')
self.max = max self.max = max
def current(self): def current(self) -> float:
''' '''
Return the current backoff value without advancing. Return the current backoff value without advancing.
''' '''
@ -34,7 +34,7 @@ class Backoff:
y = min(y, self.max) y = min(y, self.max)
return y return y
def next(self): def next(self) -> float:
''' '''
Return the current backoff value, then advance x. Return the current backoff value, then advance x.
''' '''
@ -42,13 +42,13 @@ class Backoff:
self.x += 1 self.x += 1
return y return y
def reset(self): def reset(self) -> None:
''' '''
Reset x to 0. Reset x to 0.
''' '''
self.x = 0 self.x = 0
def rewind(self, steps): def rewind(self, steps) -> None:
''' '''
Subtract this many steps from x, to ease up the backoff without Subtract this many steps from x, to ease up the backoff without
entirely resetting. entirely resetting.

View File

@ -7,7 +7,7 @@ Bencode data.
https://en.wikipedia.org/wiki/Bencode https://en.wikipedia.org/wiki/Bencode
''' '''
def bencode(data): def bencode(data) -> bytes:
''' '''
Encode python types to bencode. Encode python types to bencode.
''' '''

View File

@ -10,7 +10,7 @@ HELPSTRINGS = {'', 'help', '-h', '--help'}
# INTERNALS # INTERNALS
################################################################################ ################################################################################
def can_use_bare(parser): def can_use_bare(parser) -> bool:
''' '''
Return true if the given parser has no required arguments, ie can run bare. Return true if the given parser has no required arguments, ie can run bare.
This is used to decide whether running `> myprogram.py` should show the This is used to decide whether running `> myprogram.py` should show the
@ -29,7 +29,7 @@ def can_use_bare(parser):
has_required_args = any(is_required(action) for action in parser._actions) has_required_args = any(is_required(action) for action in parser._actions)
return has_func and not has_required_args return has_func and not has_required_args
def can_use_bare_subparsers(subparser_action): def can_use_bare_subparsers(subparser_action) -> set:
''' '''
Return a set of subparser names which can be used bare. Return a set of subparser names which can be used bare.
''' '''
@ -39,7 +39,7 @@ def can_use_bare_subparsers(subparser_action):
) )
return can_bares return can_bares
def docstring_preview(text): def docstring_preview(text) -> str:
''' '''
This function assumes that your docstring is formatted with a single blank This function assumes that your docstring is formatted with a single blank
line separating the command's primary summary and the rest of the text, line separating the command's primary summary and the rest of the text,
@ -66,7 +66,7 @@ def listget(li, index, fallback=None):
except IndexError: except IndexError:
return fallback return fallback
def add_previews(docstring, sub_docstrings): def add_previews(docstring, sub_docstrings) -> str:
''' '''
Given a primary docstring which contains {command_name} formatting elements, Given a primary docstring which contains {command_name} formatting elements,
and a dict of sub_docstrings of {command_name: docstring}, insert previews and a dict of sub_docstrings of {command_name: docstring}, insert previews
@ -85,7 +85,7 @@ def get_subparser_action(parser):
return action return action
raise TypeError('Couldn\'t locate the SubParsersAction.') raise TypeError('Couldn\'t locate the SubParsersAction.')
def set_alias_docstrings(sub_docstrings, subparser_action): def set_alias_docstrings(sub_docstrings, subparser_action) -> dict:
''' '''
When using subparser aliases: When using subparser aliases:

View File

@ -3,7 +3,7 @@ import sys
from voussoirkit import pipeable from voussoirkit import pipeable
def hms_to_seconds(hms): def hms_to_seconds(hms) -> float:
''' '''
Convert hh:mm:ss string to an integer or float of seconds. Convert hh:mm:ss string to an integer or float of seconds.
''' '''
@ -21,7 +21,7 @@ def hms_to_seconds(hms):
seconds += float(parts[0]) seconds += float(parts[0])
return seconds return seconds
def seconds_to_hms(seconds, force_minutes=False, force_hours=False): def seconds_to_hms(seconds, force_minutes=False, force_hours=False) -> str:
''' '''
Convert integer number of seconds to an hh:mm:ss string. Convert integer number of seconds to an hh:mm:ss string.
Only the necessary fields are used. Only the necessary fields are used.

View File

@ -12,7 +12,7 @@ def fit_into_bounds(
frame_width, frame_width,
frame_height, frame_height,
only_shrink=False, only_shrink=False,
): ) -> tuple:
''' '''
Given the w+h of the image and the w+h of the frame, 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 return new w+h that fits the image into the frame
@ -32,7 +32,7 @@ def fit_into_bounds(
return (new_width, new_height) return (new_width, new_height)
def pad_to_square(image, background_color=None): def pad_to_square(image, background_color=None) -> PIL.Image:
''' '''
If the given image is not already square, return a new, square image with If the given image is not already square, return a new, square image with
additional padding on top and bottom or left and right. additional padding on top and bottom or left and right.

View File

@ -1,14 +1,14 @@
import re import re
import unicodedata import unicodedata
def collapse_whitespace(text): def collapse_whitespace(text) -> str:
''' '''
Replace all whitespace sequences with a single space and strip the ends. Replace all whitespace sequences with a single space and strip the ends.
''' '''
text = re.sub(r'\s+', ' ', text.strip()) text = re.sub(r'\s+', ' ', text.strip())
return text return text
def comma_space_split(text): def comma_space_split(text) -> list:
''' '''
Split the string by commas and spaces, discarding all extra Split the string by commas and spaces, discarding all extra
whitespace and blank parts. whitespace and blank parts.
@ -20,7 +20,7 @@ def comma_space_split(text):
return text return text
return re.split(r'[ ,]+', text.strip()) return re.split(r'[ ,]+', text.strip())
def excise(text, mark_left, mark_right): def excise(text, mark_left, mark_right) -> str:
''' '''
Remove the text between the left and right landmarks, including the Remove the text between the left and right landmarks, including the
landmarks themselves, and return the rest of the text. landmarks themselves, and return the rest of the text.
@ -48,7 +48,7 @@ def natural_sorter(s):
alphanum_key = lambda key: [convert(c) for c in re.split('([0-9]+)', key)] alphanum_key = lambda key: [convert(c) for c in re.split('([0-9]+)', key)]
return alphanum_key(s) return alphanum_key(s)
def pascal_to_loudsnakes(text): def pascal_to_loudsnakes(text) -> str:
''' '''
>>> pascal_to_loudsnakes('PascalCase') >>> pascal_to_loudsnakes('PascalCase')
'PASCAL_CASE' 'PASCAL_CASE'
@ -60,12 +60,12 @@ def pascal_to_loudsnakes(text):
text = text.upper() text = text.upper()
return text return text
def remove_characters(text, characters): def remove_characters(text, characters) -> str:
translator = {ord(c): None for c in characters} translator = {ord(c): None for c in characters}
text = text.translate(translator) text = text.translate(translator)
return text return text
def remove_control_characters(text): def remove_control_characters(text) -> str:
''' '''
Thanks Alex Quinn Thanks Alex Quinn
https://stackoverflow.com/a/19016117 https://stackoverflow.com/a/19016117
@ -75,7 +75,7 @@ def remove_control_characters(text):
''' '''
return ''.join(c for c in text if unicodedata.category(c)[0] != 'C') return ''.join(c for c in text if unicodedata.category(c)[0] != 'C')
def title_capitalize(text): def title_capitalize(text) -> str:
text = text.strip().title() text = text.strip().title()
articles = [ articles = [
'a', 'a',

View File

@ -1,6 +1,6 @@
import os import os
def quote(arg): def quote(arg) -> str:
if os.name == 'nt': if os.name == 'nt':
# If the command contains comma, semicolon, or equals, only the left # If the command contains comma, semicolon, or equals, only the left
# half is considered the command and the rest is considered the first # half is considered the command and the rest is considered the first
@ -24,7 +24,7 @@ def quote(arg):
arg = f"'{arg}'" arg = f"'{arg}'"
return arg return arg
def format_command(command): def format_command(command) -> str:
cmd = [quote(x) for x in command] cmd = [quote(x) for x in command]
cmd = ' '.join(cmd) cmd = ' '.join(cmd)
cmd = cmd.strip() cmd = cmd.strip()