mirror of
https://gitlab.com/pamhyr/pamhyr2.git
synced 2026-10-29 19:10:42 +01:00
Time/date format: back to relative timestamps storage
This commit is contained in:
1 parent
5ce5478bf4
commit
9879094661
15 files changed
+93
-37
No files matched your search
+1
-2
@@ -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
|
||||
|
||||
@@ -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)
|
||||
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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(
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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",
|
||||
|
||||
Reference in new issue
Block a user