Source code for utils.utils

from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger
import decimal

from django.http import HttpRequest

from cobalt.settings import GLOBAL_CURRENCY_SYMBOL


[docs] def cobalt_paginator( request: HttpRequest, events_list: list, items_per_page: int = 30, page_no: int = None, ) -> Paginator.page: """common pagination function Args: page_no(int): optional page number to override what is in Request request(HTTPRequest): standard request object events_list(list): list of things to paginate items_per_page(int): number of items on a page Returns: list """ page = page_no or request.GET.get("page", 1) paginator = Paginator(events_list, items_per_page) try: events = paginator.page(page) except PageNotAnInteger: events = paginator.page(1) except EmptyPage: events = paginator.page(paginator.num_pages) return events
[docs] def cobalt_round(number): """round up to 2 decimal places Args: number(Float): number to round Returns: Float """ # Note on type conversion: # Decimal(float(21.6)) = Decimal(21.60000000000000142108547152020037174224853515625) # so if this conversion is used 2.6 will be rounded to 2.61. # Decimal("21.6") = Decimal(21.6) which will round correctly # If the supplied number is already a Decimal, just use it. cent = decimal.Decimal("0.01") dec_input = ( number if type(number) == type(cent) else decimal.Decimal(f"{number:.4f}") ) result = float(dec_input.quantize(cent, rounding=decimal.ROUND_UP)) return result
# return float( # decimal.Decimal(float(number)).quantize(cent, rounding=decimal.ROUND_UP) # )
[docs] def cobalt_currency(number): """take a number and return it as a printable currency""" return f"{GLOBAL_CURRENCY_SYMBOL}{number:,.2f}".replace("$-", "-$")