zeed-movs-viewer 0.0.1__py3-none-any.whl → 0.0.2__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- movsviewer/automation.py +5 -5
- movsviewer/chartview.py +1 -1
- movsviewer/mainui.py +2 -2
- movsviewer/plotutils.py +58 -6
- {zeed_movs_viewer-0.0.1.dist-info → zeed_movs_viewer-0.0.2.dist-info}/METADATA +1 -1
- {zeed_movs_viewer-0.0.1.dist-info → zeed_movs_viewer-0.0.2.dist-info}/RECORD +9 -9
- {zeed_movs_viewer-0.0.1.dist-info → zeed_movs_viewer-0.0.2.dist-info}/WHEEL +1 -1
- {zeed_movs_viewer-0.0.1.dist-info → zeed_movs_viewer-0.0.2.dist-info}/entry_points.txt +0 -0
- {zeed_movs_viewer-0.0.1.dist-info → zeed_movs_viewer-0.0.2.dist-info}/licenses/LICENSE +0 -0
movsviewer/automation.py
CHANGED
@@ -37,13 +37,13 @@ logger = getLogger(__name__)
|
|
37
37
|
|
38
38
|
|
39
39
|
def get_options(dtemp: str) -> Options:
|
40
|
-
|
41
|
-
|
42
|
-
options.profile = FirefoxProfile()
|
40
|
+
profile = FirefoxProfile()
|
43
41
|
# set download folder
|
44
|
-
|
45
|
-
|
42
|
+
profile.set_preference('browser.download.folderList', 2)
|
43
|
+
profile.set_preference('browser.download.dir', dtemp)
|
46
44
|
|
45
|
+
options = Options()
|
46
|
+
options.profile = profile
|
47
47
|
return options
|
48
48
|
|
49
49
|
|
movsviewer/chartview.py
CHANGED
movsviewer/mainui.py
CHANGED
@@ -8,7 +8,6 @@ from guilib.chartwidget.viewmodel import (
|
|
8
8
|
SortFilterViewModel as SortFilterViewModel2,
|
9
9
|
)
|
10
10
|
from guilib.multitabs.widget import MultiTabs
|
11
|
-
from guilib.qwtplot.plot import Plot
|
12
11
|
from guilib.searchsheet.widget import SearchSheet
|
13
12
|
from PySide6.QtCore import QCoreApplication
|
14
13
|
from PySide6.QtCore import QItemSelection
|
@@ -30,6 +29,7 @@ from PySide6.QtWidgets import QWidget
|
|
30
29
|
|
31
30
|
from movsviewer.constants import MAINUI_UI_PATH
|
32
31
|
from movsviewer.constants import SETTINGSUI_UI_PATH
|
32
|
+
from movsviewer.plotutils import PlotAndSliderWidget
|
33
33
|
from movsviewer.plotutils import load_infos
|
34
34
|
from movsviewer.settings import Settings
|
35
35
|
from movsviewer.validator import Validator
|
@@ -142,7 +142,7 @@ class NewMainui:
|
|
142
142
|
for data_path in data_paths:
|
143
143
|
sheet, model = self.new_search_sheet(data_path)
|
144
144
|
model2 = SortFilterViewModel2()
|
145
|
-
plot =
|
145
|
+
plot = PlotAndSliderWidget(model2, None)
|
146
146
|
model2.update(load_infos((data_path, 'money')))
|
147
147
|
idx = self.multi_tabs.add_double_box(sheet, plot, model.name)
|
148
148
|
self.sheets_charts[data_path] = (sheet, model2, idx)
|
movsviewer/plotutils.py
CHANGED
@@ -1,27 +1,45 @@
|
|
1
1
|
from collections import defaultdict
|
2
2
|
from datetime import date
|
3
|
+
from datetime import timedelta
|
3
4
|
from itertools import accumulate
|
4
5
|
from operator import attrgetter
|
5
6
|
from typing import TYPE_CHECKING
|
6
7
|
|
8
|
+
from guilib.chartslider.chartslider import ChartSlider
|
7
9
|
from guilib.chartwidget.model import Column
|
8
10
|
from guilib.chartwidget.model import ColumnHeader
|
9
11
|
from guilib.chartwidget.model import ColumnProto
|
10
12
|
from guilib.chartwidget.model import Info
|
11
13
|
from guilib.chartwidget.model import InfoProto
|
12
|
-
from
|
14
|
+
from guilib.qwtplot.plot import Plot
|
15
|
+
from movslib.reader import read
|
16
|
+
from PySide6.QtWidgets import QVBoxLayout
|
17
|
+
from PySide6.QtWidgets import QWidget
|
13
18
|
|
14
19
|
if TYPE_CHECKING:
|
15
20
|
from collections.abc import Iterable
|
16
21
|
from decimal import Decimal
|
17
22
|
|
23
|
+
from guilib.chartwidget.viewmodel import SortFilterViewModel
|
18
24
|
from movslib.model import Row
|
19
25
|
from movslib.model import Rows
|
20
26
|
|
21
27
|
|
28
|
+
def _acc_reset_by_year(rows: 'Rows') -> 'Iterable[tuple[date, Decimal]]':
|
29
|
+
def func(a: tuple[date, 'Decimal'], b: 'Row') -> tuple[date, 'Decimal']:
|
30
|
+
if b.date.year != a[0].year:
|
31
|
+
return b.date, b.money
|
32
|
+
|
33
|
+
return b.date, a[1] + b.money
|
34
|
+
|
35
|
+
it = iter(sorted(rows, key=attrgetter('date')))
|
36
|
+
head = next(it)
|
37
|
+
return accumulate(it, func, initial=(head.date, head.money))
|
38
|
+
|
39
|
+
|
22
40
|
def _acc(rows: 'Rows') -> 'Iterable[tuple[date, Decimal]]':
|
23
|
-
def func(a:
|
24
|
-
return
|
41
|
+
def func(a: tuple[date, 'Decimal'], b: 'Row') -> tuple[date, 'Decimal']:
|
42
|
+
return b.date, a[1] + b.money
|
25
43
|
|
26
44
|
it = iter(sorted(rows, key=attrgetter('date')))
|
27
45
|
head = next(it)
|
@@ -31,8 +49,42 @@ def _acc(rows: 'Rows') -> 'Iterable[tuple[date, Decimal]]':
|
|
31
49
|
def load_infos(*fn_names: tuple[str, str]) -> list[InfoProto]:
|
32
50
|
tmp = defaultdict[date, list[ColumnProto]](list)
|
33
51
|
for fn, name in fn_names:
|
34
|
-
_, rows =
|
35
|
-
|
52
|
+
_, rows = read(fn, name)
|
53
|
+
|
54
|
+
ch = ColumnHeader(rows.name, '€')
|
36
55
|
for d, m in _acc(rows):
|
37
56
|
tmp[d].append(Column(ch, m))
|
38
|
-
|
57
|
+
|
58
|
+
ch_year = ColumnHeader(f'{rows.name} (by year)', '€')
|
59
|
+
for d, m in _acc_reset_by_year(rows):
|
60
|
+
tmp[d].append(Column(ch_year, m))
|
61
|
+
|
62
|
+
sorted_days = sorted(tmp)
|
63
|
+
|
64
|
+
# add +/- 1 months of padding
|
65
|
+
ret: list[InfoProto] = []
|
66
|
+
ret.append(Info(sorted_days[0] - timedelta(days=30), []))
|
67
|
+
ret.extend(Info(d, tmp[d]) for d in sorted_days)
|
68
|
+
ret.append(Info(sorted_days[-1] + timedelta(days=30), []))
|
69
|
+
|
70
|
+
return ret
|
71
|
+
|
72
|
+
|
73
|
+
class PlotAndSliderWidget(QWidget):
|
74
|
+
"""Composition of a Plot and a (Chart)Slider."""
|
75
|
+
|
76
|
+
def __init__(
|
77
|
+
self, model: 'SortFilterViewModel', parent: QWidget | None
|
78
|
+
) -> None:
|
79
|
+
super().__init__(parent)
|
80
|
+
|
81
|
+
plot = Plot(model, self)
|
82
|
+
chart_slider = ChartSlider(model, self, dates_column=0)
|
83
|
+
|
84
|
+
layout = QVBoxLayout(self)
|
85
|
+
layout.addWidget(plot)
|
86
|
+
layout.addWidget(chart_slider)
|
87
|
+
self.setLayout(layout)
|
88
|
+
|
89
|
+
chart_slider.start_date_changed.connect(plot.start_date_changed)
|
90
|
+
chart_slider.end_date_changed.connect(plot.end_date_changed)
|
@@ -1,17 +1,17 @@
|
|
1
1
|
movsviewer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
2
|
-
movsviewer/automation.py,sha256=
|
3
|
-
movsviewer/chartview.py,sha256=
|
2
|
+
movsviewer/automation.py,sha256=tG-jeA7sBt3bnIykb573_Ni5rVcXms2dg10j7Mk1n_I,4395
|
3
|
+
movsviewer/chartview.py,sha256=dcuN2eBbn0GO5asl5PXUPRfMQIV3ZgddKvw4M_nHfrs,12723
|
4
4
|
movsviewer/constants.py,sha256=kCLimJp-KQV1Bfp1FM8Re9l-bPcvrgblkqhFQWSWPjM,441
|
5
|
-
movsviewer/mainui.py,sha256=
|
6
|
-
movsviewer/plotutils.py,sha256=
|
5
|
+
movsviewer/mainui.py,sha256=avemk_BUzDI-lWvXKJCNevovnN2QsfWE9tfEjej0C5k,6003
|
6
|
+
movsviewer/plotutils.py,sha256=B2c1PdhqbfKmtSY8eZ6eNqcqZHxRhDmitxfirOIR9Zo,2921
|
7
7
|
movsviewer/resources/geckodriver.exe,sha256=CCfcGwdNLMMpCWKc05nDO-3q6C88o3sEllUGV4HDGLM,3300792
|
8
8
|
movsviewer/resources/mainui.ui,sha256=lCMfw4A0KkVw9KP14raCaGzDKc7Hx2W8OexZxT3npQk,1376
|
9
9
|
movsviewer/resources/settingsui.ui,sha256=6eH5C9rkNrPlyp3JCQSW06drKhepwdQ0la4VGiqmPvE,3369
|
10
10
|
movsviewer/settings.py,sha256=7O40YUefwAJA6cQtodzhesPbJHf_1SYhD_R1UfxKfyQ,1466
|
11
11
|
movsviewer/validator.py,sha256=lyt8mEMWmW520OKsqoWP0P-B8pAbrDRx_NSNn58-kEg,916
|
12
12
|
movsviewer/viewmodel.py,sha256=Gyp96Ag3nbwXzgyQaDKguX08U4DjY3hAzkFnY17ku30,5236
|
13
|
-
zeed_movs_viewer-0.0.
|
14
|
-
zeed_movs_viewer-0.0.
|
15
|
-
zeed_movs_viewer-0.0.
|
16
|
-
zeed_movs_viewer-0.0.
|
17
|
-
zeed_movs_viewer-0.0.
|
13
|
+
zeed_movs_viewer-0.0.2.dist-info/METADATA,sha256=xwRXslJBZYXY_VHYwP0etbCvkZgVynlZXavNbATHoKA,41098
|
14
|
+
zeed_movs_viewer-0.0.2.dist-info/WHEEL,sha256=9P2ygRxDrTJz3gsagc0Z96ukrxjr-LFBGOgv3AuKlCA,90
|
15
|
+
zeed_movs_viewer-0.0.2.dist-info/entry_points.txt,sha256=Cr9WqD8tBOMTJBuMV6-ayk_L49BmMfrKyZLk51-0008,71
|
16
|
+
zeed_movs_viewer-0.0.2.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
|
17
|
+
zeed_movs_viewer-0.0.2.dist-info/RECORD,,
|
File without changes
|
File without changes
|