Time/date format: back to relative timestamps storage

This commit is contained in:
Dylan Jeannin committed 2026-09-15 11:33:04 +02:00
1 parent 5ce5478bf4
commit 9879094661
15 files changed
+93 -37

No files matched your search

+1 -2
View File
@@ -217,8 +217,7 @@ class Study(SQLModel):
me.name = name
me.description = description
if date is not None:
me.use_date()
me.date = date
me.use_date(date)
return me
@classmethod
+4 -4
View File
@@ -94,11 +94,11 @@ class TableModel(PamhyrTableModel):
v = v.replace(',', '.')
value = f"{float(v):.4f}"
elif self._data.header[column] == "time":
if self._opt_data == "time":
if self.time_system == "time":
value = timestamp_to_old_pamhyr_date(int(v))
else:
value = format_datetime(
datetime(1970, 1, 1) + timedelta(seconds=float(v))
parse_datetime(self.start_date) + timedelta(seconds=float(v))
)
else:
value = f"{v}"
@@ -117,8 +117,8 @@ class TableModel(PamhyrTableModel):
try:
if (self._data.header[column] == "time"
and self._opt_data == "date"):
value = self.date_to_timestamp(value)
and self.time_system == "date"):
value = self.date_to_elapsed_seconds(value)
row = self.get_true_data_row(row)
+8 -1
View File
@@ -18,6 +18,8 @@
import logging
from Modules import Modules
from tools import timer, trace
from numpy import sqrt
@@ -174,7 +176,7 @@ class EditBoundaryConditionWindow(PamhyrWindow):
data=self._data,
undo=self._undo_stack,
opt_data=self._study.time_system,
start_date=self._study.date
study=self._study
)
table.setModel(self._table)
@@ -262,6 +264,11 @@ class EditBoundaryConditionWindow(PamhyrWindow):
self._d50sigma.set_d50(self._data.d50)
self._d50sigma.set_sigma(self._data.sigma)
def _propagated_update(self, key=Modules(0)):
if Modules.STUDY in key:
self._table.layoutChanged.emit()
self.plot.update()
def update(self):
self.plot.update()
@@ -21,6 +21,7 @@ import traceback
from datetime import date, time, datetime, timedelta
from tools import parse_datetime
from tools import (
trace, timer,
timestamp_to_old_pamhyr_date,
@@ -84,11 +85,11 @@ class TableModel(PamhyrTableModel):
if self._data._types[column] == float:
value = f"{v:.4f}"
elif self._data.header[column] == "time":
if self._opt_data == "time":
if self.time_system == "time":
value = timestamp_to_old_pamhyr_date(int(v))
else:
value = format_datetime(
datetime(1970, 1, 1) + timedelta(seconds=float(v))
parse_datetime(self.start_date) + timedelta(seconds=float(v))
)
else:
value = f"{v}"
@@ -107,8 +108,8 @@ class TableModel(PamhyrTableModel):
try:
if (self._data.header[column] == "time"
and self._opt_data == "date"):
value = self.date_to_timestamp(value)
and self.time_system == "date"):
value = self.date_to_elapsed_seconds(value)
row = self.get_true_data_row(row)
@@ -18,6 +18,8 @@
import logging
from Modules import Modules
from tools import timer, trace
from View.Tools.PamhyrWindow import PamhyrWindow
@@ -129,7 +131,7 @@ class EditBoundaryConditionWindow(PamhyrWindow):
data=self._data,
undo=self._undo_stack,
opt_data=self._study.time_system,
start_date=self._study.date
study=self._study
)
table.setModel(self._table)
@@ -162,6 +164,11 @@ class EditBoundaryConditionWindow(PamhyrWindow):
self.find(QAction, "action_sort").triggered.connect(self.sort)
self._table.dataChanged.connect(self.update)
def _propagated_update(self, key=Modules(0)):
if Modules.STUDY in key:
self._table.layoutChanged.emit()
self.plot.update()
def update(self):
self.plot.update()
self.plot.fit_to_data()
@@ -21,6 +21,7 @@ import traceback
from datetime import date, time, datetime, timedelta
from tools import parse_datetime
from tools import (
trace, timer,
timestamp_to_old_pamhyr_date,
@@ -84,11 +85,11 @@ class TableModel(PamhyrTableModel):
if self._data._types[column] == float:
value = f"{v:.2f}"
elif self._data.header[column] == "time":
if self._opt_data == "time":
if self.time_system == "time":
value = timestamp_to_old_pamhyr_date(int(v))
else:
value = format_datetime(
datetime(1970, 1, 1) + timedelta(seconds=float(v))
parse_datetime(self.start_date) + timedelta(seconds=float(v))
)
else:
value = f"{v}"
@@ -107,8 +108,8 @@ class TableModel(PamhyrTableModel):
try:
if (self._data.header[column] == "time"
and self._opt_data == "date"):
value = self.date_to_timestamp(value)
and self.time_system == "date"):
value = self.date_to_elapsed_seconds(value)
row = self.get_true_data_row(row)
@@ -18,6 +18,8 @@
import logging
from Modules import Modules
from tools import timer, trace
from View.Tools.PamhyrWindow import PamhyrWindow
@@ -118,7 +120,7 @@ class EditBoundaryConditionWindow(PamhyrWindow):
data=self._data,
undo=self._undo_stack,
opt_data=self._study.time_system,
start_date=self._study.date
study=self._study
)
table.setModel(self._table)
@@ -151,6 +153,11 @@ class EditBoundaryConditionWindow(PamhyrWindow):
self.find(QAction, "action_sort").triggered.connect(self.sort)
self._table.dataChanged.connect(self.update)
def _propagated_update(self, key=Modules(0)):
if Modules.STUDY in key:
self._table.layoutChanged.emit()
self.plot.update()
def update(self):
self.plot.update()
self.plot.fit_to_data()
+5 -4
View File
@@ -20,6 +20,7 @@ import logging
import traceback
from datetime import date, time, datetime, timedelta
from tools import parse_datetime
from tools import (
trace, timer,
timestamp_to_old_pamhyr_date,
@@ -73,11 +74,11 @@ class TableModel(PamhyrTableModel):
if self._data.get_type_column(column) == float:
value = f"{v:.4f}"
elif self._data.header[column] == "time":
if self._opt_data == "time":
if self.time_system == "time":
value = timestamp_to_old_pamhyr_date(int(v))
else:
value = format_datetime(
datetime(1970, 1, 1) + timedelta(seconds=float(v))
parse_datetime(self.start_date) + timedelta(seconds=float(v))
)
else:
value = f"{v}"
@@ -96,8 +97,8 @@ class TableModel(PamhyrTableModel):
try:
if (self._data.header[column] == "time"
and self._opt_data == "date"):
value = self.date_to_timestamp(value)
and self.time_system == "date"):
value = self.date_to_elapsed_seconds(value)
self._undo.push(
SetDataCommand(
+8 -1
View File
@@ -25,6 +25,8 @@ from PyQt5.QtGui import (
QKeySequence,
)
from Modules import Modules
from PyQt5.QtCore import (
Qt, QVariant, QAbstractTableModel, QCoreApplication,
)
@@ -110,7 +112,7 @@ class EditLateralContributionWindow(PamhyrWindow):
undo=self._undo_stack,
trad=self._trad,
opt_data=self._study.time_system,
start_date=self._study.date
study=self._study
)
table.setModel(self._table)
@@ -146,6 +148,11 @@ class EditLateralContributionWindow(PamhyrWindow):
self._table.dataChanged.connect(self.update)
self._table.layoutChanged.connect(self.update)
def _propagated_update(self, key=Modules(0)):
if Modules.STUDY in key:
self._table.layoutChanged.emit()
self.plot.update()
def update(self):
self.plot.update()
self.plot.fit_to_data()
@@ -20,6 +20,7 @@ import logging
import traceback
from datetime import date, time, datetime, timedelta
from tools import parse_datetime
from tools import (
trace, timer,
timestamp_to_old_pamhyr_date,
@@ -87,11 +88,11 @@ class TableModel(PamhyrTableModel):
if self._data._types[column] == float:
value = f"{v:.4f}"
elif self._data.header[column] == "time":
if self._opt_data == "time":
if self.time_system == "time":
value = timestamp_to_old_pamhyr_date_adists(int(v))
else:
value = format_datetime(
datetime(1970, 1, 1) + timedelta(seconds=float(v))
parse_datetime(self.start_date) + timedelta(seconds=float(v))
)
else:
value = f"{v}"
@@ -110,8 +111,8 @@ class TableModel(PamhyrTableModel):
try:
if (self._data.header[column] == "time"
and self._opt_data == "date"):
value = self.date_to_timestamp(value)
and self.time_system == "date"):
value = self.date_to_elapsed_seconds(value)
row = self.get_true_data_row(row)
@@ -29,6 +29,8 @@ from PyQt5.QtCore import (
Qt, QVariant, QAbstractTableModel, QCoreApplication,
)
from Modules import Modules
from PyQt5.QtWidgets import (
QDialogButtonBox, QPushButton, QLineEdit,
QFileDialog, QTableView, QAbstractItemView,
@@ -132,7 +134,7 @@ class EditLateralContributionAdisTSWindow(PamhyrWindow):
undo=self._undo_stack,
trad=self._trad,
opt_data=self._study.time_system,
start_date=self._study.date
study=self._study
)
table.setModel(self._table)
@@ -166,6 +168,11 @@ class EditLateralContributionAdisTSWindow(PamhyrWindow):
self._table.dataChanged.connect(self.update)
def _propagated_update(self, key=Modules(0)):
if Modules.STUDY in key:
self._table.layoutChanged.emit()
self.plot.update()
def update(self):
self.plot.update()
self.plot.fit_to_data()
+13 -5
View File
@@ -18,7 +18,6 @@
import logging
import traceback
from datetime import timezone
from tools import trace, timer, parse_datetime
@@ -63,8 +62,16 @@ class PamhyrTextDelegate(QStyledItemDelegate):
class PamhyrTableModel(QAbstractTableModel):
def date_to_timestamp(self, value):
"""Convert an accepted calendar date to its raw UTC timestamp."""
@property
def time_system(self):
return self._study.time_system if self._study is not None else self._opt_data
@property
def start_date(self):
return self._study.date if self._study is not None else self._start_date
def date_to_elapsed_seconds(self, value):
"""Convert an accepted calendar date to elapsed simulation seconds."""
try:
entered_date = parse_datetime(value)
except ValueError as error:
@@ -82,7 +89,7 @@ class PamhyrTableModel(QAbstractTableModel):
)
raise error
return entered_date.replace(tzinfo=timezone.utc).timestamp()
return (entered_date - parse_datetime(self.start_date)).total_seconds()
def _setup_delegates(self):
if self._table_view is None:
@@ -111,7 +118,7 @@ class PamhyrTableModel(QAbstractTableModel):
opt_data=None,
options=["rows_selection"],
parent=None,
start_date=None):
start_date=None, study=None):
super(PamhyrTableModel, self).__init__()
self._table_view = table_view
@@ -129,6 +136,7 @@ class PamhyrTableModel(QAbstractTableModel):
self._undo = undo
self._lst = []
self._start_date = start_date
self._study = study
self._setup_delegates()
self._setup_lst()
+5 -4
View File
@@ -20,6 +20,7 @@ import logging
import traceback
from datetime import date, time, datetime, timedelta
from tools import parse_datetime
from tools import (
trace, timer,
timestamp_to_old_pamhyr_date,
@@ -74,11 +75,11 @@ class TableModel(PamhyrTableModel):
if self._data.get_type_column(column) == float:
value = f"{v:.4f}"
elif self._data.header[column] == "time":
if self._opt_data == "time":
if self.time_system == "time":
value = timestamp_to_old_pamhyr_date(int(v))
else:
value = format_datetime(
datetime(1970, 1, 1) + timedelta(seconds=float(v))
parse_datetime(self.start_date) + timedelta(seconds=float(v))
)
else:
value = f"{v}"
@@ -97,8 +98,8 @@ class TableModel(PamhyrTableModel):
try:
if (self._data.header[column] == "time"
and self._opt_data == "date"):
value = self.date_to_timestamp(value)
and self.time_system == "date"):
value = self.date_to_elapsed_seconds(value)
self._undo.push(
SetDataCommand(
+8 -1
View File
@@ -25,6 +25,8 @@ from PyQt5.QtGui import (
QKeySequence,
)
from Modules import Modules
from PyQt5.QtCore import (
Qt, QVariant, QAbstractTableModel, QCoreApplication,
)
@@ -122,7 +124,7 @@ class EditWeatherParametersWindow(PamhyrWindow):
undo=self._undo_stack,
trad=self._trad,
opt_data=self._study.time_system,
start_date=self._study.date
study=self._study
)
table.setModel(self._table)
@@ -158,6 +160,11 @@ class EditWeatherParametersWindow(PamhyrWindow):
self._table.dataChanged.connect(self.update)
self._table.layoutChanged.connect(self.update)
def _propagated_update(self, key=Modules(0)):
if Modules.STUDY in key:
self._table.layoutChanged.emit()
self.plot.update()
def update(self):
self.plot.update()
self.plot.fit_to_data()
+2
View File
@@ -240,6 +240,8 @@ def timestamp(dt: datetime):
SUPPORTED_DATETIME_FORMATS = (
"%d:%m:%Y, %H:%M:%S",
"%d:%m:%Y",
"%d-%m-%Y %H:%M:%S.%f",
"%d-%m-%Y %H:%M:%S",
"%d-%m-%Y %H:%M",