diff --git a/aleksis/core/util/core_helpers.py b/aleksis/core/util/core_helpers.py index 4ab3a1ee8fbb12aa5149529cfbbd1a6be77d18a2..b1f93298f39daa775e4450fc0c5192290a407467 100644 --- a/aleksis/core/util/core_helpers.py +++ b/aleksis/core/util/core_helpers.py @@ -1,4 +1,6 @@ from datetime import datetime, timedelta +from itertools import groupby +from operator import itemgetter import os import pkgutil from importlib import import_module @@ -12,6 +14,18 @@ from django.utils import timezone from django.utils.functional import lazy +def copyright_years(years: Sequence[int], seperator: str = ", ", joiner: str = "–") -> str: + """ Takes a sequence of integegers and produces a string with ranges + + >>> copyright_years([1999, 2000, 2001, 2005, 2007, 2008, 2009]) + '1999–2001, 2005, 2007–2009' + """ + + ranges = [list(map(itemgetter(1), group)) for _, group in groupby(enumerate(years), lambda e: e[1]-e[0])] + years_strs = [str(range_[0]) if len(range_) == 1 else joiner.join([str(range_[0]), str(range_[-1])]) for range_ in ranges] + + return seperator.join(years_strs) + def dt_show_toolbar(request: HttpRequest) -> bool: from debug_toolbar.middleware import show_toolbar # noqa