Files
the-office/server/helpers.py
Xevion fd107b0d60 Take necessary helpers from server.data.helpers for normalization, Add unidecode to Pipfile
- General cleanup, getting ready to delete server.data
2022-05-10 00:46:24 -05:00

75 lines
2.2 KiB
Python

"""
helpers.py
"""
import random
import re
import string
import unicodedata
from collections import OrderedDict
from difflib import SequenceMatcher
from heapq import nlargest as _nlargest
from typing import List, Optional, Tuple
import unidecode
episode_counts = [6, 22, 23, 14, 26, 24, 24, 24, 23]
def check_validity(season: int, episode: int):
"""Shorthand function for checking if a specific episode is valid."""
return (1 <= season <= 9) and (1 <= episode <= episode_counts[season])
def default(value, other):
"""Value default, similar to dict.get, but better."""
return value if value is not None else other
def get_neighbors(array: List, index: int, distance: int = 2) -> Tuple[List, List]:
"""Get neighbors above and below a specific index in an array. Returns maximum number of items possible."""
top, below = [], []
for i in range(1, distance + 1):
top_index = index - i
below_index = index + i
if top_index >= 0:
top.append(array[top_index])
if below_index < len(array):
below.append(array[below_index])
return top[::-1], below
def algolia_transform(old_dictionary: dict, key_list: List[Tuple[str, Optional[str]]]) -> dict:
"""
Transforms a dictionary object of a quote (from algolia.json) into a API-ready quote.
Used for cli.character (i.e. characters.json)
:param old_dictionary: The original Algolia dictionary
:param key_list: A list of keys to keep in the dictionary in a tuple. One item tuple to keep the tuple's name, a
second item requests a 'rename' for the quote.
:return: The reformatted dictionary.
"""
new_dictionary = {}
for keyItem in key_list:
if len(keyItem) > 1:
new_dictionary[keyItem[1]] = old_dictionary[keyItem[0]]
else:
new_dictionary[keyItem[0]] = old_dictionary[keyItem[0]]
return new_dictionary
def character_id(name: str) -> str:
return '-'.join(name.split(' ')).lower()
alphabet: str = string.ascii_letters + string.digits
def random_id(length: int = 8) -> str:
"""Generate a random {length} character long string."""
return ''.join(random.choices(alphabet, k=length))