Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix bug where large year being entered may cause a crash. #150

Open
wants to merge 74 commits into
base: dev
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
350215d
Removed www subdomain from localhost on Windows.
esitarski Jul 28, 2023
f4744ef
updated version
esitarski Jul 28, 2023
ed06ce0
Merge branch 'master' of github.com:esitarski/CrossMgr
esitarski Jul 28, 2023
d5499ef
Release v3.1.29-20230728153157
esitarski Jul 28, 2023
1b04dbd
Release v3.1.30-20230728153703
esitarski Jul 28, 2023
7170355
Release v3.1.31-20230729113344
esitarski Jul 29, 2023
a95ac1d
Release v3.1.31-20230824101244
esitarski Aug 24, 2023
a63f46f
Release v3.1.31-20230921100718
esitarski Sep 21, 2023
2cfd87a
Release v3.1.32-20231019043955
esitarski Oct 19, 2023
b0d62cc
Release v3.1.32-20231020084520
esitarski Oct 20, 2023
9347d51
Release v3.1.33-20231023093043
esitarski Oct 23, 2023
1d11e50
Release v3.1.34-20231116125247
esitarski Nov 16, 2023
936a019
Release v3.1.34-20231117122523
esitarski Nov 17, 2023
a37b1a5
Release v3.1.35-20231118152517
esitarski Nov 18, 2023
2f9fe9c
Release v3.1.35-20231118155916
esitarski Nov 18, 2023
35d0342
Release v3.1.35-20231118163510
esitarski Nov 18, 2023
2b009e1
Release v3.1.38-20231120174447
esitarski Nov 20, 2023
0a23161
Release v3.1.39-20231120195750
esitarski Nov 21, 2023
6e454cf
Release v3.1.40-20240203092341
esitarski Feb 3, 2024
095d37a
Release v3.1.40-20240203105257
esitarski Feb 3, 2024
3993f89
Release v3.1.41-20240220142334
esitarski Feb 20, 2024
3e4904e
Release v3.1.41-20240220151234
esitarski Feb 20, 2024
d199009
Release v3.1.42-20240226141745
esitarski Feb 26, 2024
794adac
Release v3.1.44-20240313050848
esitarski Mar 13, 2024
98d093a
Release v3.1.45-20240315102023
esitarski Mar 15, 2024
09349d2
Release v3.1.46-20240321115312
esitarski Mar 21, 2024
3f47a65
Release v3.1.46-20240323040955
esitarski Mar 23, 2024
2ba0301
Release v3.1.47-20240418094244
esitarski Apr 18, 2024
ce880ef
Release v3.1.48-20240420090842
esitarski Apr 20, 2024
ccdd01a
Release v3.1.49-20240421130411
esitarski Apr 21, 2024
bc47f5f
Release v3.1.50-20240423124236
esitarski Apr 23, 2024
fd89a6e
Release v3.1.50-20240424141333
esitarski Apr 24, 2024
8c01bef
Release v3.1.51-20240426082304
esitarski Apr 26, 2024
2585aee
Release v3.1.51-20240429130536
esitarski Apr 29, 2024
e986903
Release v3.1.54-20240507125931
esitarski May 7, 2024
54daf3d
Release v3.1.54-20240507185551
esitarski May 7, 2024
269748d
Release v3.1.55-20240510104656
esitarski May 10, 2024
0b590c2
Release v3.1.57-20240607105341
esitarski Jun 7, 2024
e252df6
Release v3.1.58-20240609120654
esitarski Jun 9, 2024
405f830
Release v3.1.58-20240613145937
esitarski Jun 13, 2024
69108ad
Release v3.1.58-20240614082301
esitarski Jun 14, 2024
30fe36a
Release v3.1.57-20240630211328
esitarski Jul 1, 2024
f7bf50d
Release v3.1.58-20240703155302
esitarski Jul 3, 2024
be7103a
Release v3.1.57-20240705175916
esitarski Jul 5, 2024
f454849
Release v3.1.57-20240708132300
esitarski Jul 8, 2024
5476ac0
Release v3.1.58-20240710131247
esitarski Jul 10, 2024
90c391e
Release v3.1.58-20240711205201
esitarski Jul 12, 2024
8f7caef
Release v3.1.58-20240712115250
esitarski Jul 12, 2024
1f10eb2
Release v3.1.58-20240712142248
esitarski Jul 12, 2024
d5379e8
Release v3.1.58-20240715124928
esitarski Jul 15, 2024
6491299
Release v3.1.58-20240715153812
esitarski Jul 15, 2024
baadafe
Release v3.1.58-20240716105654
esitarski Jul 16, 2024
c87d39f
Release v3.1.59-20240717044056
esitarski Jul 17, 2024
5e08bf2
Release v3.1.59-20240717054934
esitarski Jul 17, 2024
3800500
Release v3.1.59-20240717095247
esitarski Jul 17, 2024
a97ace1
Release v3.1.59-20240718145420
esitarski Jul 18, 2024
28d0188
Release v3.1.59-20240720083133
esitarski Jul 20, 2024
f8ef9d1
Release v3.1.59-20240722103412
esitarski Jul 22, 2024
a61cb2b
Release v3.1.59-20240730090420
esitarski Jul 30, 2024
2a1f7e4
Release v3.1.59-20240731143810
esitarski Jul 31, 2024
c1afeb9
Release v3.1.59-20240731192333
esitarski Jul 31, 2024
2699e8a
Release v3.1.60-20240801165523
esitarski Aug 1, 2024
22fd252
Release v3.1.60-20240811101149
esitarski Aug 11, 2024
5876b55
Release v3.1.61-20240814130959
esitarski Aug 14, 2024
290cbf9
Release v3.1.62-20240816123322
esitarski Aug 16, 2024
33bc5e6
Release v3.1.64-20240830101346
esitarski Aug 30, 2024
81c5f2f
Release v3.1.64-20240922091654
esitarski Sep 22, 2024
28097db
Release v3.1.64-20240922140139
esitarski Sep 22, 2024
c2440ef
Release v3.1.64-20241005131640
esitarski Oct 5, 2024
bbc8653
Release v3.1.64-20241005132627
esitarski Oct 5, 2024
ebd2306
Release v3.1.64-20241008081902
esitarski Oct 8, 2024
6fae3ed
Release v3.1.65-20241031160243
esitarski Oct 31, 2024
32d43f2
Release v3.1.65-20241102162049
esitarski Nov 2, 2024
5a67b1c
Add Safe date picker to prevent crash on Windows when large year valu…
tjsr Jan 27, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion CrossMgrVideo/MainWin.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,8 @@
from time import sleep
from queue import Queue

from DatePicker import SafeDatePickerCtrl

from datetime import datetime, timedelta, time

now = datetime.now
Expand Down Expand Up @@ -580,7 +582,7 @@ def __init__( self, parent, id = wx.ID_ANY, title='', size=(1000,800) ):
hsDate = wx.BoxSizer( wx.HORIZONTAL )
hsDate.Add( wx.StaticText(self, label='Show Triggers for'), flag=wx.ALIGN_CENTER_VERTICAL )
tQuery = now()
self.date = wx.adv.DatePickerCtrl(
self.date = SafeDatePickerCtrl(
self,
dt=wx.DateTime.FromDMY( tQuery.day, tQuery.month-1, tQuery.year ),
style=wx.adv.DP_DROPDOWN|wx.adv.DP_SHOWCENTURY
Expand Down
6 changes: 3 additions & 3 deletions CrossMgrVideo/ManageDatabase.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import os
import datetime

DatePickerCtrl = wx.adv.DatePickerCtrl
from DatePicker import SafeDatePickerCtrl

class ManageDatabase( wx.Dialog ):
def __init__( self, parent, dbSize, dbName, trigFirst, trigLast, id=wx.ID_ANY, title='', size=wx.DefaultSize, style=wx.DEFAULT_DIALOG_STYLE ):
Expand Down Expand Up @@ -40,7 +40,7 @@ def __init__( self, parent, dbSize, dbName, trigFirst, trigLast, id=wx.ID_ANY, t
hs = wx.BoxSizer( wx.HORIZONTAL )
hs.Add( wx.StaticText(self, label='Delete all data (inclusive) from'), flag=wx.ALIGN_CENTER_VERTICAL )
tQuery = datetime.datetime.now() - datetime.timedelta(days=7)
self.dateFrom = DatePickerCtrl(
self.dateFrom = SafeDatePickerCtrl(
self,
dt=wx.DateTime.FromDMY( tQuery.day, tQuery.month-1, tQuery.year ),
style=wx.adv.DP_DROPDOWN|wx.adv.DP_SHOWCENTURY|wx.adv.DP_ALLOWNONE
Expand All @@ -49,7 +49,7 @@ def __init__( self, parent, dbSize, dbName, trigFirst, trigLast, id=wx.ID_ANY, t

hs.Add( wx.StaticText(self, label='to'), flag=wx.ALIGN_CENTER_VERTICAL|wx.LEFT, border=4 )
tQuery = datetime.datetime.now() - datetime.timedelta(days=1)
self.dateTo = DatePickerCtrl(
self.dateTo = SafeDatePickerCtrl(
self,
dt=wx.DateTime.FromDMY( tQuery.day, tQuery.month-1, tQuery.year ),
style=wx.adv.DP_DROPDOWN|wx.adv.DP_SHOWCENTURY|wx.adv.DP_ALLOWNONE
Expand Down
31 changes: 31 additions & 0 deletions DatePicker.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
from typing import Any

import wx, wx.adv
from wx.adv import DatePickerCtrl

import Utils

class SafeDatePickerCtrl(DatePickerCtrl):
def __init__(self,
*args: Any,
**kw: Any) -> None:
style = kw.pop('style', wx.adv.DP_DROPDOWN)
dt = kw.pop('dt', Utils.GetDateTimeToday())
super().__init__(style=style, dt=dt, *args, **kw)

currentRange = self.GetRange()
if not currentRange or not len(currentRange) == 2:
minRange = wx.DateTime.FromDMY(1, 0, 1900)
maxRange = wx.DateTime.FromDMY(1, 0, 2200)
else:
minRange = currentRange[1].Value
maxRange = currentRange[2].Value

if currentRange[2].Inv_Year < 1601:
maxRange = wx.DateTime.FromDMY(1, 0, 2200)

super().SetRange(
dt1=minRange,
dt2=maxRange
)

4 changes: 3 additions & 1 deletion PointsRaceMgr/Configure.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@

import wx
import wx.adv

from DatePicker import SafeDatePickerCtrl
from NumCtrl import PosNumCtrl
import wx.lib.intctrl as IC

Expand Down Expand Up @@ -36,7 +38,7 @@ def __init__( self, parent, id=wx.ID_ANY, size=(200,200) ):
hs = wx.BoxSizer( wx.HORIZONTAL )
label = wx.StaticText( self, label='Date:' )
hs.Add( label, flag=wx.ALIGN_CENTER_VERTICAL|wx.LEFT, border=16 )
ctrl = wx.adv.DatePickerCtrl( self, style = wx.adv.DP_DROPDOWN | wx.adv.DP_SHOWCENTURY, size=(132,-1) )
ctrl = SafeDatePickerCtrl( self, style = wx.adv.DP_DROPDOWN | wx.adv.DP_SHOWCENTURY, size=(132,-1) )
ctrl.Bind( wx.adv.EVT_DATE_CHANGED, self.onChange )
hs.Add( ctrl, flag=wx.ALIGN_LEFT|wx.ALIGN_CENTER_VERTICAL|wx.LEFT, border=4 )
self.dateLabel = label
Expand Down
26 changes: 20 additions & 6 deletions Properties.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
import sys

import wx
import wx.adv
import re
import os
import wx.lib.intctrl as intctrl
Expand All @@ -8,6 +11,10 @@
import threading
import subprocess
import platform

from wx import CommandEvent

from DatePicker import SafeDatePickerCtrl
from RaceInputState import RaceInputState
import Utils
import Model
Expand Down Expand Up @@ -73,7 +80,7 @@ def __init__( self, parent, id = wx.ID_ANY ):
self.locationSizer.Add( self.raceCountry, 2, flag=wx.EXPAND|wx.LEFT, border=3 )

self.dateLabel = wx.StaticText( self, label = _('Date') )
self.date = wx.adv.DatePickerCtrl(
self.date = SafeDatePickerCtrl(
self,
dt = Utils.GetDateTimeToday(),
style = wx.adv.DP_DROPDOWN,
Expand Down Expand Up @@ -152,8 +159,12 @@ def refresh( self ):
self.raceCountry.SetValue( race.country )
self.raceDiscipline.SetValue( getattr(race, 'discipline', 'Cyclo-cross') )
d = wx.DateTime()
d.ParseDate(race.date)
self.date.SetValue( d )
try:
d.ParseDate(race.date)
self.date.SetValue( d )
except ValueError as e:
print('Bad date {}, Parse Error:'.format(race.date), e, file=sys.stderr)

self.raceNum.SetValue( race.raceNum )
self.scheduledStart.SetValue( race.scheduledStart )
self.minutes.SetValue( race.minutes )
Expand All @@ -169,16 +180,19 @@ def commit( self ):
race.stateProv = self.raceStateProv.GetValue().strip()
race.country = self.raceCountry.GetValue().strip()
race.discipline = self.raceDiscipline.GetValue().strip()
race.date = self.date.GetValue().Format(Properties.dateFormat)
try:
race.date = self.date.GetValue().Format(Properties.dateFormat)
except ValueError as e:
print('Bad date {}, Format Error:'.format(self.date.GetValue()), e, file=sys.stderr)

race.raceNum = self.raceNum.GetValue()
race.scheduledStart = self.scheduledStart.GetValue()
race.minutes = self.minutes.GetValue()
race.organizer = self.organizer.GetValue().strip()
race.commissaire = self.commissaire.GetValue().strip()
race.memo = self.memo.GetValue().strip()

def onChanged( self, event ):
#self.updateFileName()
def onChanged( self, event: CommandEvent ):
pass

#------------------------------------------------------------------------------------------------
Expand Down
6 changes: 4 additions & 2 deletions RaceDB.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import re
import os
import wx
import wx, wx.adv
import wx.dataview as dataview
import requests
import datetime
Expand All @@ -11,6 +11,8 @@
import Utils
import Model
from AddExcelInfo import getInfo
from DatePicker import SafeDatePickerCtrl


def GetRaceDBConfigFile():
return os.path.join( os.path.expanduser('~'), 'CrossMgrRaceDB.ini' )
Expand Down Expand Up @@ -223,7 +225,7 @@ def __init__( self, parent, id=wx.ID_ANY, size=(1100,600) ):
self.raceDBUrl.Bind( wx.EVT_TEXT_ENTER, self.onChange )
self.raceDBUrl.SetDropTarget(URLDropTarget(self.raceDBUrl, self.refresh))
raceDBLogo.SetDropTarget(URLDropTarget(self.raceDBUrl, self.refresh))
self.datePicker = wx.adv.DatePickerCtrl(
self.datePicker = SafeDatePickerCtrl(
self,
size=(120,-1),
dt=Utils.GetDateTimeToday(),
Expand Down
4 changes: 2 additions & 2 deletions SprintMgr/FieldDef.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
import datetime

import wx
from wx.adv import DatePickerCtrl
from DatePicker import SafeDatePickerCtrl
from wx.lib.intctrl import IntCtrl
from wx.lib.masked.numctrl import NumCtrl
from wx.lib.masked import TimeCtrl, EVT_TIMEUPDATE
Expand Down Expand Up @@ -74,7 +74,7 @@ def makeCtrls( self, parent ):
self.editCtrl.Bind( wx.EVT_TEXT, self.onChanged )

elif self.type == FieldDef.DateType:
self.editCtrl = DatePickerCtrl( parent, style = wx.adv.DP_DROPDOWN | wx.adv.DP_SHOWCENTURY, size=(120,-1))
self.editCtrl = SafeDatePickerCtrl( parent, style = wx.adv.DP_DROPDOWN | wx.adv.DP_SHOWCENTURY, size=(120,-1))
self.editCtrl.Bind( wx.adv.EVT_DATE_CHANGED, self.onChanged )

elif self.type == FieldDef.TimeType:
Expand Down