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 CHANGED
@@ -37,13 +37,13 @@ logger = getLogger(__name__)
37
37
 
38
38
 
39
39
  def get_options(dtemp: str) -> Options:
40
- options = Options()
41
-
42
- options.profile = FirefoxProfile()
40
+ profile = FirefoxProfile()
43
41
  # set download folder
44
- options.profile.set_preference('browser.download.folderList', 2)
45
- options.profile.set_preference('browser.download.dir', dtemp)
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
@@ -231,7 +231,7 @@ class Chart(QChart):
231
231
  self.scroll(x_prev - x_curr, y_curr - y_prev)
232
232
 
233
233
 
234
- MONEY_HEADER = ColumnHeader('money')
234
+ MONEY_HEADER = ColumnHeader('money', '€')
235
235
 
236
236
 
237
237
  @dataclass
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 = Plot(model2, None)
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 movslib.movs import read_txt
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: 'tuple[date, Decimal]', b: 'Row') -> 'tuple[date, Decimal]':
24
- return (b.date, a[1] + b.money)
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 = read_txt(fn, name)
35
- ch = ColumnHeader(rows.name)
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
- return [Info(d, tmp[d]) for d in sorted(tmp)]
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,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: zeed-movs-viewer
3
- Version: 0.0.1
3
+ Version: 0.0.2
4
4
  License: GNU AFFERO GENERAL PUBLIC LICENSE
5
5
  Version 3, 19 November 2007
6
6
 
@@ -1,17 +1,17 @@
1
1
  movsviewer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
- movsviewer/automation.py,sha256=Q9MqPP8d9iUx-DAJOYYT2taCIlqA1elK2NHPNiYBTNQ,4390
3
- movsviewer/chartview.py,sha256=UkoYhrlCtcD4Iw62TRUD0wYPPKaVD7Suj18nwx-lH5I,12716
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=buFop4EHSx7lbYN12OvzLHHCLGXRz9FrqsMy7KnxaM4,5972
6
- movsviewer/plotutils.py,sha256=AxiRJT2FKoBfiYqvudWJum8ku5XpKUDzXupcH2iw_T4,1251
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.1.dist-info/METADATA,sha256=sTLvDXpilitcVJSaX6eLuDkQN_S_WRKYuEV4sziNnlg,41098
14
- zeed_movs_viewer-0.0.1.dist-info/WHEEL,sha256=thaaA2w1JzcGC48WYufAs8nrYZjJm8LqNfnXFOFyCC4,90
15
- zeed_movs_viewer-0.0.1.dist-info/entry_points.txt,sha256=Cr9WqD8tBOMTJBuMV6-ayk_L49BmMfrKyZLk51-0008,71
16
- zeed_movs_viewer-0.0.1.dist-info/licenses/LICENSE,sha256=hIahDEOTzuHCU5J2nd07LWwkLW7Hko4UFO__ffsvB-8,34523
17
- zeed_movs_viewer-0.0.1.dist-info/RECORD,,
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,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: pdm-backend (2.4.3)
2
+ Generator: pdm-backend (2.4.5)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any