Private
Public Access
1
0
This commit is contained in:
Sander Roosendaal
2022-02-16 13:21:58 +01:00
parent 4f48901c55
commit 984198e63c
2 changed files with 263 additions and 201 deletions

View File

@@ -1,3 +1,5 @@
from datetime import date
from django import template from django import template
from django.utils.safestring import mark_safe from django.utils.safestring import mark_safe
from time import strftime from time import strftime
@@ -7,17 +9,19 @@ import json
import math import math
import datetime import datetime
import re import re
register = template.Library()
from rowers.utils import calculate_age from rowers.utils import calculate_age
from rowers.models import ( from rowers.models import (
course_length, WorkoutComment, course_length, WorkoutComment,
TrainingMacroCycle, TrainingMesoCycle, TrainingMicroCycle, TrainingMacroCycle, TrainingMesoCycle, TrainingMicroCycle,
Rower, Workout, SiteAnnouncement, TeamInvite, TeamRequest, CoachOffer, CoachRequest, Rower, Workout, SiteAnnouncement, TeamInvite, TeamRequest, CoachOffer, CoachRequest,
VirtualRaceFollower,VirtualRace,favanalysischoices VirtualRaceFollower, VirtualRace, favanalysischoices,
) Team, TrainingPlan, TrainingTarget)
from rowers.plannedsessions import ( from rowers.plannedsessions import (
race_can_register, race_can_submit,race_rower_status race_can_register, race_can_submit, race_rower_status)
) from rowers.models import PlannedSession
from rowers.teams import coach_getcoachees
from rowers import credits from rowers import credits
from rowers import c2stuff from rowers import c2stuff
@@ -25,26 +29,27 @@ from rowers.c2stuff import c2_open
from rowers.rower_rules import is_coach_user, is_workout_user, isplanmember, ispromember from rowers.rower_rules import is_coach_user, is_workout_user, isplanmember, ispromember
from rowers.mytypes import ( from rowers.mytypes import (
otwtypes, adaptivetypes, sexcategories, weightcategories, workouttypes, otwtypes, adaptivetypes, sexcategories, weightcategories, workouttypes,
workouttypes_icons, workouttypes_icons)
)
from rowers.utils import NoTokenError, step_to_string, landingpages2 from rowers.utils import NoTokenError, step_to_string, landingpages2
from rowers.teams import rower_get_managers
import rowers.payments as payments import rowers.payments as payments
from rowsandall_app.settings import NK_VIEWER_LOCATION from rowsandall_app.settings import NK_VIEWER_LOCATION
from rowers.opaque import encoder from rowers.opaque import encoder
from rowers.plannedsessions import ps_dict_get_description_html from rowers.plannedsessions import ps_dict_get_description_html
import arrow import arrow
from django.utils.safestring import mark_safe
from django.utils.html import urlize as urlize_impl from django.utils.html import urlize as urlize_impl
from django.template.defaultfilters import stringfilter from django.template.defaultfilters import stringfilter
from six import string_types from six import string_types
register = template.Library()
@register.filter @register.filter
def workoutdate(id): # pragma: no cover def workoutdate(id): # pragma: no cover
try: try:
@@ -53,6 +58,7 @@ def workoutdate(id): # pragma: no cover
except Workout.DoesNotExist: except Workout.DoesNotExist:
return 'unknown' return 'unknown'
@register.filter @register.filter
def isfollower(user, id): def isfollower(user, id):
@@ -65,9 +71,9 @@ def isfollower(user,id):
followers = VirtualRaceFollower.objects.filter(race=race, user=user) followers = VirtualRaceFollower.objects.filter(race=race, user=user)
return followers.count() == 0 return followers.count() == 0
favanalysisdict = {} favanalysisdict = {}
for key, value in favanalysischoices: for key, value in favanalysischoices:
favanalysisdict[key] = value favanalysisdict[key] = value
@@ -88,6 +94,7 @@ landingpageicons = {
'workout_delete': 'fas fa-trash-alt fa-fw' 'workout_delete': 'fas fa-trash-alt fa-fw'
} }
@register.filter @register.filter
def landingicon(landingpage): def landingicon(landingpage):
try: try:
@@ -95,11 +102,13 @@ def landingicon(landingpage):
except KeyError: # pragma: no cover except KeyError: # pragma: no cover
return 'fas fa-search fa-fw' return 'fas fa-search fa-fw'
@register.filter @register.filter
def steptostring(steps): def steptostring(steps):
res = ps_dict_get_description_html(steps, short=True) res = ps_dict_get_description_html(steps, short=True)
return res return res
# for verbose version of fav analysis # for verbose version of fav analysis
@register.filter @register.filter
def verbose(s): def verbose(s):
@@ -108,10 +117,12 @@ def verbose(s):
except KeyError: # pragma: no cover except KeyError: # pragma: no cover
return 'Details' return 'Details'
@register.filter @register.filter
def datarows(data): # pragma: no cover def datarows(data): # pragma: no cover
return range(len(data)) return range(len(data))
@register.filter @register.filter
def adaptive(s): def adaptive(s):
u = s u = s
@@ -123,6 +134,7 @@ def adaptive(s):
return u return u
@register.filter @register.filter
def nkviewerlink(workout): # pragma: no cover def nkviewerlink(workout): # pragma: no cover
url = "{nkviewer}{nkid}".format( url = "{nkviewer}{nkid}".format(
@@ -143,6 +155,7 @@ def boatclass(s):
return u return u
@register.filter @register.filter
def sex(s): def sex(s):
u = s u = s
@@ -154,6 +167,7 @@ def sex(s):
return u return u
@register.filter @register.filter
def weekbegin(nr): def weekbegin(nr):
week, day = divmod(nr, 7) week, day = divmod(nr, 7)
@@ -161,6 +175,7 @@ def weekbegin(nr):
return True return True
return False return False
@register.filter @register.filter
def discount(amount, rower): # pragma: no cover def discount(amount, rower): # pragma: no cover
return credits.discount(amount, rower) return credits.discount(amount, rower)
@@ -170,6 +185,7 @@ def discount(amount,rower): # pragma: no cover
def discounted(amount, rower): def discounted(amount, rower):
return credits.discounted(amount, rower) return credits.discounted(amount, rower)
@register.filter @register.filter
def weekend(nr): def weekend(nr):
week, day = divmod(nr, 7) week, day = divmod(nr, 7)
@@ -177,6 +193,7 @@ def weekend(nr):
return True return True
return False return False
@register.filter @register.filter
def weight(s): def weight(s):
u = s u = s
@@ -188,6 +205,7 @@ def weight(s):
return u return u
@register.filter @register.filter
def sigdig(value, digits=3): def sigdig(value, digits=3):
try: try:
@@ -207,6 +225,7 @@ def sigdig(value, digits = 3):
fmtstr = "%.0f" fmtstr = "%.0f"
return fmtstr % (round(value, places)) # pragma: no cover return fmtstr % (round(value, places)) # pragma: no cover
@register.filter @register.filter
def pickle(dc): # pragma: no cover def pickle(dc): # pragma: no cover
s = dict() s = dict()
@@ -215,6 +234,7 @@ def pickle(dc): # pragma: no cover
return s return s
@register.filter(is_safe=True, needs_autoescape=True) @register.filter(is_safe=True, needs_autoescape=True)
@stringfilter @stringfilter
def urlshorten(value, limit, autoescape=None): def urlshorten(value, limit, autoescape=None):
@@ -223,28 +243,29 @@ def urlshorten(value, limit,autoescape=None):
value, trim_url_limit=int(limit), value, trim_url_limit=int(limit),
nofollow=True, autoescape=autoescape).replace('<a', '<a target="_blank"')) nofollow=True, autoescape=autoescape).replace('<a', '<a target="_blank"'))
@register.filter @register.filter
def nogoals(user): def nogoals(user):
targets = TrainingTarget.objects.filter(rowers=user.rower, targets = TrainingTarget.objects.filter(rowers=user.rower,
date__gte=datetime.date.today()) date__gte=datetime.date.today())
return len(targets) == 0 return len(targets) == 0
@register.filter @register.filter
def notfree(rower): def notfree(rower):
return rower.rowerplan not in ['basic', 'freecoach'] return rower.rowerplan not in ['basic', 'freecoach']
def strfdelta(tdelta): def strfdelta(tdelta):
minutes, seconds = divmod(tdelta.seconds, 60) minutes, seconds = divmod(tdelta.seconds, 60)
tenths = int(tdelta.microseconds/1e5) tenths = int(tdelta.microseconds/1e5)
res = "{minutes:0>1}:{seconds:0>2}.{tenths:0>1}".format( res = "{minutes:0>1}:{seconds:0>2}.{tenths:0>1}".format(
minutes=minutes, minutes=minutes,
seconds=seconds, seconds=seconds,
tenths=tenths, tenths=tenths)
)
return res return res
from rowers.teams import rower_get_managers
@register.filter @register.filter
def alertstatspercentage(list, i): # pragma: no cover def alertstatspercentage(list, i): # pragma: no cover
@@ -252,24 +273,28 @@ def alertstatspercentage(list,i): # pragma: no cover
return alertstats["percentage"] return alertstats["percentage"]
@register.filter @register.filter
def alertstartdate(list, i): # pragma: no cover def alertstartdate(list, i): # pragma: no cover
alertstats = list[i-1] alertstats = list[i-1]
return alertstats["startdate"] return alertstats["startdate"]
@register.filter @register.filter
def alertnperiod(list, i): # pragma: no cover def alertnperiod(list, i): # pragma: no cover
alertstats = list[i-1] alertstats = list[i-1]
return alertstats["nperiod"] return alertstats["nperiod"]
@register.filter @register.filter
def alertenddate(list, i): # pragma: no cover def alertenddate(list, i): # pragma: no cover
alertstats = list[i-1] alertstats = list[i-1]
return alertstats["enddate"] return alertstats["enddate"]
@register.filter @register.filter
def is_coach(rower, rowers): def is_coach(rower, rowers):
for r in rowers: for r in rowers:
@@ -278,12 +303,14 @@ def is_coach(rower,rowers):
return True return True
@register.filter @register.filter
def waterpower(x, rower): # pragma: no cover def waterpower(x, rower): # pragma: no cover
if rower is not None: if rower is not None:
return int(x*(100-rower.otwslack)/100.) return int(x*(100-rower.otwslack)/100.)
return int(x) return int(x)
@register.filter @register.filter
def round20(x): # pragma: no cover def round20(x): # pragma: no cover
try: try:
@@ -291,6 +318,7 @@ def round20(x): # pragma: no cover
except ValueError: except ValueError:
return 20 return 20
@register.filter @register.filter
def round100(x): # pragma: no cover def round100(x): # pragma: no cover
try: try:
@@ -298,6 +326,7 @@ def round100(x): # pragma: no cover
except ValueError: except ValueError:
return 100 return 100
@register.filter @register.filter
def majorticks(maxval): # pragma: no cover def majorticks(maxval): # pragma: no cover
ticks = range(1+int(maxval/100.)) ticks = range(1+int(maxval/100.))
@@ -307,6 +336,7 @@ def majorticks(maxval): # pragma: no cover
return newticks return newticks
@register.filter @register.filter
def hrmajorticks(maxval, minval): # pragma: no cover def hrmajorticks(maxval, minval): # pragma: no cover
ticks = range(int((maxval-minval)/20.)-1) ticks = range(int((maxval-minval)/20.)-1)
@@ -316,6 +346,7 @@ def hrmajorticks(maxval,minval): # pragma: no cover
return newticks return newticks
def strfdeltah(tdelta): def strfdeltah(tdelta):
hours, rest = divmod(tdelta.seconds, 3600) hours, rest = divmod(tdelta.seconds, 3600)
minutes, seconds = divmod(rest, 60) minutes, seconds = divmod(rest, 60)
@@ -324,11 +355,11 @@ def strfdeltah(tdelta):
hours=hours, hours=hours,
minutes=minutes, minutes=minutes,
seconds=seconds, seconds=seconds,
tenths=tenths, tenths=tenths)
)
return res return res
@register.filter @register.filter
def secondstotimestring(tdelta): def secondstotimestring(tdelta):
hours, rest = divmod(tdelta, 3600) hours, rest = divmod(tdelta, 3600)
@@ -336,11 +367,11 @@ def secondstotimestring(tdelta):
res = "{hours:0>2}:{minutes:0>2}:{seconds:0>2}".format( res = "{hours:0>2}:{minutes:0>2}:{seconds:0>2}".format(
hours=hours, hours=hours,
minutes=minutes, minutes=minutes,
seconds=seconds, seconds=seconds)
)
return res return res
@register.filter @register.filter
def existing_customer(user): def existing_customer(user):
if user.is_anonymous: # pragma: no cover if user.is_anonymous: # pragma: no cover
@@ -348,6 +379,7 @@ def existing_customer(user):
else: else:
return payments.is_existing_customer(user.rower) return payments.is_existing_customer(user.rower)
@register.filter @register.filter
def aantalcomments(workout): def aantalcomments(workout):
try: try:
@@ -359,6 +391,7 @@ def aantalcomments(workout):
return aantalcomments return aantalcomments
@register.filter @register.filter
def encode(id): def encode(id):
try: try:
@@ -367,6 +400,7 @@ def encode(id):
result = '' result = ''
return result return result
@register.filter @register.filter
def water(workout): def water(workout):
try: try:
@@ -374,14 +408,17 @@ def water(workout):
except AttributeError: # pragma: no cover except AttributeError: # pragma: no cover
return False return False
@register.filter @register.filter
def ddays(ddelta): def ddays(ddelta):
return ddelta.days+1 return ddelta.days+1
@register.filter @register.filter
def spacetohtml(t): def spacetohtml(t):
return t.replace(" ", "%20") return t.replace(" ", "%20")
@register.filter @register.filter
def distanceprint(d): def distanceprint(d):
if d < 10000: if d < 10000:
@@ -390,9 +427,10 @@ def distanceprint(d):
d2 = d / 1000. # pragma: no cover d2 = d / 1000. # pragma: no cover
return "%.2f km" % d2 # pragma: no cover return "%.2f km" % d2 # pragma: no cover
@register.filter @register.filter
def durationprint(d, dstring): def durationprint(d, dstring):
if (d == None): # pragma: no cover if (d is None): # pragma: no cover
return d return d
else: else:
try: try:
@@ -400,6 +438,7 @@ def durationprint(d,dstring):
except AttributeError: except AttributeError:
return None return None
def getstartenddate(timeperiod): def getstartenddate(timeperiod):
s, e = timeperiod.split('/') s, e = timeperiod.split('/')
startdate = arrow.get(s).date() startdate = arrow.get(s).date()
@@ -407,6 +446,7 @@ def getstartenddate(timeperiod):
return startdate, enddate return startdate, enddate
@register.filter @register.filter
def nextperiodend(timeperiod): def nextperiodend(timeperiod):
startdate, enddate = getstartenddate(timeperiod) startdate, enddate = getstartenddate(timeperiod)
@@ -420,21 +460,19 @@ def nextperiodend(timeperiod):
@register.filter @register.filter
def nextperiodstart(timeperiod): def nextperiodstart(timeperiod):
startdate, enddate = getstartenddate(timeperiod) startdate, enddate = getstartenddate(timeperiod)
timedelta = enddate-startdate
newstartdate = enddate+datetime.timedelta(days=1) newstartdate = enddate+datetime.timedelta(days=1)
newenddate = newstartdate+timedelta
return newstartdate.strftime("%Y-%m-%d") return newstartdate.strftime("%Y-%m-%d")
@register.filter @register.filter
def previousperiodend(timeperiod): def previousperiodend(timeperiod):
startdate, enddate = getstartenddate(timeperiod) startdate, enddate = getstartenddate(timeperiod)
timedelta = enddate-startdate
newenddate = startdate-datetime.timedelta(days=1) newenddate = startdate-datetime.timedelta(days=1)
newstartdate = startdate-timedelta-datetime.timedelta(days=1)
return newenddate.strftime("%Y-%m-%d") return newenddate.strftime("%Y-%m-%d")
@register.filter @register.filter
def timedeltadays(timeperiod): def timedeltadays(timeperiod):
startdate, enddate = getstartenddate(timeperiod) startdate, enddate = getstartenddate(timeperiod)
@@ -442,29 +480,32 @@ def timedeltadays(timeperiod):
return timedelta.days+1 return timedelta.days+1
@register.filter @register.filter
def previousperiodstart(timeperiod): def previousperiodstart(timeperiod):
startdate, enddate = getstartenddate(timeperiod) startdate, enddate = getstartenddate(timeperiod)
timedelta = enddate-startdate timedelta = enddate-startdate
newenddate = startdate-datetime.timedelta(days=1)
newstartdate = startdate-timedelta-datetime.timedelta(days=1) newstartdate = startdate-timedelta-datetime.timedelta(days=1)
return newstartdate.strftime("%Y-%m-%d") return newstartdate.strftime("%Y-%m-%d")
@register.filter @register.filter
def paceprint(d): def paceprint(d):
if (d == None): # pragma: no cover if (d is None): # pragma: no cover
return d return d
else: else:
return strfdelta(d) return strfdelta(d)
@register.filter @register.filter
def deltatimeprint(d): # pragma: no cover def deltatimeprint(d): # pragma: no cover
if (d == None): if (d is None):
return d return d
else: else:
return strfdeltah(d) return strfdeltah(d)
@register.filter @register.filter
def c2userid(user): # pragma: no cover def c2userid(user): # pragma: no cover
try: try:
@@ -476,6 +517,7 @@ def c2userid(user): # pragma: no cover
return c2userid return c2userid
@register.filter @register.filter
def currency(word): def currency(word):
try: try:
@@ -490,11 +532,13 @@ def currency(word):
def courselength(course): # pragma: no cover def courselength(course): # pragma: no cover
return course_length(course) return course_length(course)
@register.filter(is_safe=True) @register.filter(is_safe=True)
def jsdict(dict, key): # pragma: no cover def jsdict(dict, key): # pragma: no cover
s = dict.get(key) s = dict.get(key)
return mark_safe(json.dumps(s)) return mark_safe(json.dumps(s))
@register.filter @register.filter
def icon(workouttype): def icon(workouttype):
try: try:
@@ -518,6 +562,7 @@ def lookup(dict, key):
s = s[:22] s = s[:22]
return s return s
@register.filter @register.filter
def lookuplong(dict, key): def lookuplong(dict, key):
try: try:
@@ -528,7 +573,6 @@ def lookuplong(dict, key):
return s return s
from rowers.models import PlannedSession
@register.filter @register.filter
def is_session_manager(id, user): def is_session_manager(id, user):
try: try:
@@ -550,7 +594,6 @@ def may_edit(workout,request):
return mayedit return mayedit
@register.filter @register.filter
def mayeditplan(obj, request): def mayeditplan(obj, request):
@@ -568,33 +611,35 @@ def mayeditplan(obj,request):
if is_coach_user(request.user, obj.rower) and rr.rowerplan not in ['basic', 'pro']: # pragma: no cover if is_coach_user(request.user, obj.rower) and rr.rowerplan not in ['basic', 'pro']: # pragma: no cover
mayedit = True mayedit = True
return mayedit # pragma: no cover return mayedit # pragma: no cover
@register.filter @register.filter
def iterrows(df): # pragma: no cover def iterrows(df): # pragma: no cover
return df.iterrows() return df.iterrows()
@register.filter(name='times') @register.filter(name='times')
def times(number): # pragma: no cover def times(number): # pragma: no cover
return range(number) return range(number)
@register.simple_tag @register.simple_tag
def get_df_iloc(data, i, j): # pragma: no cover def get_df_iloc(data, i, j): # pragma: no cover
return data.iloc(i, j) return data.iloc(i, j)
@register.simple_tag @register.simple_tag
def get_field_id(id, s, form): # pragma: no cover def get_field_id(id, s, form): # pragma: no cover
field_name = s+str(id) field_name = s+str(id)
return form.__getitem__(field_name) return form.__getitem__(field_name)
from rowers.models import Rower,Team,TrainingPlan,TrainingTarget
@register.filter @register.filter
def is_promember(user): def is_promember(user):
return ispromember(user) return ispromember(user)
@register.filter @register.filter
def is_manager(user): def is_manager(user):
r = Rower.objects.get(user=user) r = Rower.objects.get(user=user)
@@ -605,6 +650,7 @@ def is_manager(user):
def is_planmember(user): def is_planmember(user):
return isplanmember(user) return isplanmember(user)
@register.filter @register.filter
def get_age(r): # pragma: no cover def get_age(r): # pragma: no cover
return calculate_age(r.birthdate) return calculate_age(r.birthdate)
@@ -622,6 +668,7 @@ def user_teams(user):
return teams return teams
@register.filter @register.filter
def user_team1(user): def user_team1(user):
try: try:
@@ -634,29 +681,31 @@ def user_team1(user):
return teams[0].id return teams[0].id
@register.filter @register.filter
def announcements(request): def announcements(request):
announcements = SiteAnnouncement.objects.filter( announcements = SiteAnnouncement.objects.filter(
expires__gte=datetime.date.today()).order_by( expires__gte=datetime.date.today()).order_by(
"-created", "-created",
"-id" "-id")
)
return announcements[0:4] return announcements[0:4]
@register.filter @register.filter
def has_teams(user): # pragma: no cover def has_teams(user): # pragma: no cover
try: try:
therower = Rower.objects.get(user=user) therower = Rower.objects.get(user=user)
teams1 = therower.team.all() teams1 = therower.team.all()
teams2 = Team.objects.filter(manager=user) teams2 = Team.objects.filter(manager=user)
teams = list(set(teams1).union(set(teams2))) _ = list(set(teams1).union(set(teams2)))
return True return True
except TypeError: except TypeError:
return False return False
return False return False
@register.filter @register.filter
def team_members(user): def team_members(user):
try: try:
@@ -665,16 +714,16 @@ def team_members(user):
return [] return []
teams = Team.objects.filter(manager=user) teams = Team.objects.filter(manager=user)
members = Rower.objects.filter( members = Rower.objects.filter(
team__in=teams team__in=teams).distinct().order_by(
).distinct().order_by( "user__last_name", "user__first_name").exclude(
"user__last_name","user__first_name" rowerplan='freecoach')
).exclude(rowerplan='freecoach')
return [rower.user for rower in members] return [rower.user for rower in members]
except TypeError: # pragma: no cover except TypeError: # pragma: no cover
return [] return []
return [] # pragma: no cover return [] # pragma: no cover
@register.filter @register.filter
def openactions(user): def openactions(user):
myteams = Team.objects.filter(manager=user) myteams = Team.objects.filter(manager=user)
@@ -698,16 +747,16 @@ def team_rowers(user): # pragma: no cover
if therower.rowerplan == 'basic': if therower.rowerplan == 'basic':
return [] return []
teams = Team.objects.filter(manager=user) teams = Team.objects.filter(manager=user)
members = Rower.objects.filter(team__in=teams).distinct().order_by( members = Rower.objects.filter(
"user__last_name","user__last_name" team__in=teams).distinct().order_by(
).exclude(rowerplan='freecoach') "user__last_name", "user__last_name").exclude(
rowerplan='freecoach')
return members return members
except TypeError: except TypeError:
return [] return []
return [] return []
from rowers.teams import coach_getcoachees
@register.filter @register.filter
def coach_rowers(user): def coach_rowers(user):
@@ -737,7 +786,6 @@ def verbosetimeperiod(timeperiod): # pragma: no cover
return verbose return verbose
from datetime import date
@ register.filter @ register.filter
def future_date_only(the_date): # pragma: no cover def future_date_only(the_date): # pragma: no cover
@@ -751,13 +799,13 @@ def future_date_only(the_date): # pragma: no cover
def is_future_date(the_date): def is_future_date(the_date):
return the_date >= date.today() return the_date >= date.today()
@register.filter @register.filter
def amount(value): def amount(value):
vs = '{v}.00'.format(v=int(value)) vs = '{v}.00'.format(v=int(value))
return vs return vs
@register.filter @register.filter
def date_dif(the_date): def date_dif(the_date):
if the_date == date(1970, 1, 1): if the_date == date(1970, 1, 1):
@@ -772,41 +820,51 @@ def date_dif(the_date):
def can_register(race, r): def can_register(race, r):
return race_can_register(r, race) return race_can_register(r, race)
@register.filter @register.filter
def can_submit(race, r): # pragma: no cover def can_submit(race, r): # pragma: no cover
return race_can_submit(r, race) return race_can_submit(r, race)
@register.filter @register.filter
def race_complete(race, r): # pragma: no cover def race_complete(race, r): # pragma: no cover
is_complete, has_registered = race_rower_status(r, race) is_complete, has_registered = race_rower_status(r, race)
return is_complete return is_complete
@register.filter @register.filter
def past_not_registered(race, r): # pragma: no cover def past_not_registered(race, r): # pragma: no cover
is_complete, has_registered = race_rower_status(r, race) is_complete, has_registered = race_rower_status(r, race)
return not has_registered return not has_registered
@register.filter @register.filter
def future_registered(race, r): # pragma: no cover def future_registered(race, r): # pragma: no cover
is_complete, has_registered = race_rower_status(r, race) is_complete, has_registered = race_rower_status(r, race)
is_open = race.evaluation_closure > timezone.now() is_open = race.evaluation_closure > timezone.now()
return has_registered and not is_complete and is_open return has_registered and not is_complete and is_open
@property @property
def is_past_due(self): # pragma: no cover def is_past_due(self): # pragma: no cover
return datetime.date.today() > self.date return datetime.date.today() > self.date
@property @property
def is_not_past_due(self): # pragma: no cover def is_not_past_due(self): # pragma: no cover
return datetime.date.today() <= self.date return datetime.date.today() <= self.date
@register.filter @register.filter
def is_closed(race): # pragma: no cover def is_closed(race): # pragma: no cover
return race.evaluation_closure < timezone.now() return race.evaluation_closure < timezone.now()
@register.filter @register.filter
def is_final(race): # pragma: no cover def is_final(race): # pragma: no cover
return race.evaluation_closure < timezone.now()-datetime.timedelta(hours=1) return race.evaluation_closure < timezone.now()-datetime.timedelta(hours=1)
@register.filter @register.filter
def userurl(path, member): def userurl(path, member):
pattern = re.compile('user\/\d+/') pattern = re.compile('user\/\d+/')
@@ -824,6 +882,7 @@ def userurl(path,member):
return replaced return replaced
@register.filter @register.filter
def teamurl(path, team): def teamurl(path, team):
pattern = re.compile('team\/\d+/') pattern = re.compile('team\/\d+/')
@@ -834,15 +893,14 @@ def teamurl(path,team):
if upattern.search(path) is not None: if upattern.search(path) is not None:
path = upattern.sub('/', path) path = upattern.sub('/', path)
if pattern.search(path) is not None: if pattern.search(path) is not None:
replaced = pattern.sub(teamstring, path) replaced = pattern.sub(teamstring, path)
else: else:
replaced = path+teamstring replaced = path+teamstring
return replaced return replaced
@register.filter @register.filter
def timeurl(path, timestring): # pragma: no cover def timeurl(path, timestring): # pragma: no cover
pattern = re.compile('\?when=w.*') pattern = re.compile('\?when=w.*')
@@ -857,6 +915,7 @@ def timeurl(path,timestring): # pragma: no cover
return replaced return replaced
@register.filter @register.filter
def trainingplans(rower): def trainingplans(rower):
today = datetime.date.today() today = datetime.date.today()
@@ -868,6 +927,7 @@ def trainingplans(rower):
return plans return plans
@register.filter @register.filter
def mesomacroid(id): # pragma: no cover def mesomacroid(id): # pragma: no cover
try: try:
@@ -879,6 +939,7 @@ def mesomacroid(id): # pragma: no cover
return str(theid) return str(theid)
@register.filter @register.filter
def micromesoid(id): # pragma: no cover def micromesoid(id): # pragma: no cover
try: try:
@@ -902,6 +963,7 @@ def micromacroid(id): # pragma: no cover
return str(theid) return str(theid)
@register.filter @register.filter
def nextworkout(workout, user): def nextworkout(workout, user):
if user.rower == workout.user: if user.rower == workout.user:
@@ -931,7 +993,6 @@ def nextworkout(workout,user):
return 0 return 0
@register.filter @register.filter
def previousworkout(workout, user): def previousworkout(workout, user):
if user.rower == workout.user: if user.rower == workout.user:

View File

@@ -1,3 +1,4 @@
[flake8] [flake8]
ignore = F405, F403, E722, E226, W504, F401, W605 ignore = F405, F403, E722, E226, W504, F401, W605
max-line-length = 120 max-line-length = 120
exclude = .git, rowers/migrations