monopyly 1.4.2__py3-none-any.whl → 1.4.3__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.
monopyly/__init__.py CHANGED
@@ -1,8 +1,6 @@
1
1
  """
2
2
  Run a development server for the Monopyly app.
3
3
  """
4
- import warnings
5
-
6
4
  from flask import Flask
7
5
 
8
6
  from monopyly.config import DevelopmentConfig, ProductionConfig
monopyly/_version.py CHANGED
@@ -1,4 +1,4 @@
1
1
  # file generated by setuptools_scm
2
2
  # don't change, don't track in version control
3
- __version__ = version = '1.4.2'
4
- __version_tuple__ = version_tuple = (1, 4, 2)
3
+ __version__ = version = '1.4.3'
4
+ __version_tuple__ = version_tuple = (1, 4, 3)
monopyly/auth/routes.py CHANGED
@@ -26,7 +26,9 @@ def register():
26
26
  # Get username and passwords from the form
27
27
  username, password = get_username_and_password(request.form)
28
28
  # Check for errors in the accessed information
29
- if not username:
29
+ if not current_app.config["REGISTRATION"]:
30
+ error = "The app is not currently accepting new registrations."
31
+ elif not username:
30
32
  error = "Username is required."
31
33
  elif not password:
32
34
  error = "Password is required."
monopyly/cli/run.py CHANGED
@@ -12,6 +12,7 @@ from pathlib import Path
12
12
  from threading import Event
13
13
 
14
14
  from flask import current_app
15
+ from rich.console import Console
15
16
 
16
17
  from .apps import DevelopmentApplication, LocalApplication, ProductionApplication
17
18
 
@@ -47,11 +48,14 @@ def parse_arguments():
47
48
  parser.add_argument(
48
49
  "--browser",
49
50
  action="store_true",
50
- help="a flag indicating if a new browswer window should be opened",
51
+ help=(
52
+ "a flag indicating if a new browser window should be opened (development "
53
+ "and local modes only)"
54
+ ),
51
55
  )
52
56
  parser.add_argument(
53
57
  "mode",
54
- help="the runtime mode for the app; defaults to `development`",
58
+ help="the runtime mode for the app",
55
59
  choices=["development", "local", "production"],
56
60
  )
57
61
  return parser.parse_args()
@@ -65,6 +69,7 @@ class Launcher:
65
69
  "local": LocalApplication,
66
70
  "production": ProductionApplication,
67
71
  }
72
+ _console = Console()
68
73
  _exit = Event()
69
74
  command = ["flask"]
70
75
 
@@ -77,15 +82,20 @@ class Launcher:
77
82
  def initialize_database(self):
78
83
  """Run the database initializer."""
79
84
  instruction = self.command + ["init-db"]
85
+ self._console.print("[deep_sky_blue1]Initializing the database...")
80
86
  subprocess.run(instruction)
87
+ print("\n")
81
88
 
82
89
  def backup_database(self):
83
90
  """Back up the app database."""
91
+ self._console.print("[deep_sky_blue1]Backing up the database...")
84
92
  instruction = self.command + ["back-up-db"]
85
93
  subprocess.run(instruction)
94
+ print("\n")
86
95
 
87
96
  def launch(self):
88
97
  """Launch the Monopyly application."""
98
+ self._console.print("[deep_sky_blue1]Running the Monopyly application...\n")
89
99
  self.app.run()
90
100
 
91
101
  def open_browser(self, delay=0):
@@ -10,6 +10,7 @@ class Config:
10
10
  """A base configuration object with some default settings."""
11
11
 
12
12
  config_filepaths = [DEFAULT_CONFIG_PATH]
13
+ REGISTRATION = True
13
14
 
14
15
  def __init__(self, db_path=None):
15
16
  # Read parameters from the configuration files in order of specificity
@@ -1,5 +1,4 @@
1
1
  """A module containing objects with various configuration settings."""
2
- import json
3
2
  import warnings
4
3
  from pathlib import Path
5
4
 
@@ -252,9 +252,9 @@ aside.sidebar {
252
252
 
253
253
  .screenshot {
254
254
  width: 100%; /* override the markdown default */
255
- margin: 20px 0;
255
+ margin: 20px 0;
256
256
  border: 1px solid #f3f3f3;
257
- box-shadow: 3px 3px 5px #bbbbbb;
257
+ box-shadow: 3px 3px 5px #bbbbbb;
258
258
  }
259
259
 
260
260
  .grouping {
@@ -1208,6 +1208,7 @@ form .autocomplete-box .item.active {
1208
1208
  .transactions-table .expanded .setting .date {
1209
1209
  display: flex;
1210
1210
  flex-direction: column;
1211
+ justify-content: center;
1211
1212
  align-items: center;
1212
1213
  flex: 2;
1213
1214
  padding-top: 3px;
@@ -11,7 +11,7 @@
11
11
 
12
12
  // Identify the card filters
13
13
  const $filterContainer = $('#card-filter');
14
-
14
+
15
15
  // Label inactive cards when they are hovered over
16
16
  const inactiveCardFilters = $filterContainer.find('.inactive.card');
17
17
  let defaultText;
@@ -31,7 +31,7 @@
31
31
  $this.text(defaultText);
32
32
  }
33
33
  );
34
-
34
+
35
35
  // Change the filter status on click
36
36
  const $filters = $filterContainer.find('.card');
37
37
  $filters.on('click', function() {
@@ -9,24 +9,10 @@
9
9
  */
10
10
 
11
11
  import {
12
- replaceDisplayContentsAjaxRequest
13
- } from './modules/update-display-ajax.js';
14
- import { toggleTransactionRow } from './modules/expand-transaction.js';
15
-
16
-
17
- function displaySubtransactions($transaction) {
18
-
19
- // Execute an AJAX request to get transaction/subtransaction information
20
- const endpoint = EXPAND_TRANSACTION_ENDPOINT;
21
- const rawData = $transaction.data("transaction-id");
22
- const $container = $transaction.find('.subtransaction-container');
23
- replaceDisplayContentsAjaxRequest(endpoint, rawData, $container);
24
-
25
- }
12
+ TransactionToggleManager, displaySubtransactions
13
+ } from './modules/expand-transaction.js';
26
14
 
27
15
 
28
16
  (function() {
29
-
30
- toggleTransactionRow(displaySubtransactions);
31
-
17
+ const toggleManager = new TransactionToggleManager(displaySubtransactions)
32
18
  })();
@@ -11,53 +11,118 @@
11
11
  * '.transaction' element as its only argument.
12
12
  */
13
13
 
14
+ import {
15
+ replaceDisplayContentsAjaxRequest
16
+ } from './update-display-ajax.js';
14
17
 
15
- function toggleTransactionRow(callback = null) {
16
-
17
- // Identify the plus/minus icons
18
- const $iconsMoreInfo = $('.transaction .more.button');
19
- const $iconsLessInfo = $('.transaction .less.button');
20
- // Set timing variables
21
- const fadeTime = 200;
22
- const slideTime = 250;
23
-
24
- $iconsMoreInfo.on('click', function() {
25
- // Get the transaction object
26
- const $transaction = $(this).closest('.transaction');
27
- // Hide the condensed transaction summary
28
- const $condensedRow = $transaction.find('.condensed');
29
- $condensedRow.fadeTo(fadeTime, 0, function() {
30
- $(this).slideUp(slideTime);
18
+
19
+ class TransactionToggleManager {
20
+ /**
21
+ * Create the object to toggle transactions.
22
+ *
23
+ * @param {function} callback - A callback function to execute when toggling
24
+ * a button to get more info.
25
+ */
26
+ constructor(callback = null) {
27
+ // Identify the plus/minus icons
28
+ this.$iconsMoreInfoButtons = $('.transaction .more.button');
29
+ this.$iconsLessInfoButtons = $('.transaction .less.button');
30
+ this.#registerClickExpand(callback);
31
+ this.#registerClickCollapse();
32
+ }
33
+
34
+ getButtonTransaction(button) {
35
+ return $(button).closest('.transaction');
36
+ }
37
+
38
+ #registerClickExpand(callback) {
39
+ const self = this;
40
+ this.$iconsMoreInfoButtons.on('click', function() {
41
+ const $transaction = self.getButtonTransaction(this);
42
+ const toggler = new TransactionToggler($transaction);
43
+ toggler.expand(callback);
44
+ });
45
+ }
46
+
47
+ #registerClickCollapse() {
48
+ const self = this;
49
+ this.$iconsLessInfoButtons.on('click', function() {
50
+ const $transaction = self.getButtonTransaction(this);
51
+ const toggler = new TransactionToggler($transaction);
52
+ toggler.collapse();
31
53
  });
54
+ }
55
+ }
56
+
57
+
58
+ class TransactionToggler {
59
+
60
+ /**
61
+ * Create the handler.
62
+ *
63
+ * @param {Object} $transaction - The transaction to be toggled.
64
+ */
65
+ constructor($transaction) {
66
+ // Set timing variables
67
+ this.fadeTime = 200;
68
+ this.slideTime = 250;
69
+ // Identify elements of the row
70
+ this.$transaction = $transaction;
71
+ this.$extendedRow = $transaction.find('.expanded');
72
+ this.$condensedRow = $transaction.find('.condensed');
73
+ }
74
+
75
+ /**
76
+ * Expand the transaction
77
+ *
78
+ * @param {function} callback - A callback function to execute when expanding
79
+ * the transaction information. The callback function takes one argument,
80
+ * the JQuery object representing the transaction.
81
+ */
82
+ expand(callback = null) {
32
83
  // Execute the callback function, if given
33
84
  if (callback != null) {
34
- callback($transaction);
85
+ callback(this.$transaction);
35
86
  }
36
- $transaction.addClass('selected');
37
- // Show the expanded transaction summary
38
- const $expandedRow = $transaction.find('.expanded');
39
- $expandedRow.delay(fadeTime).slideDown(slideTime, function() {
40
- $(this).fadeTo(fadeTime, 1);
87
+ this.#toggleTransaction(this.$condensedRow, this.$extendedRow);
88
+ this.$transaction.addClass('selected');
89
+ }
90
+
91
+ collapse($transaction) {
92
+ this.#toggleTransaction(this.$extendedRow, this.$condensedRow);
93
+ this.$transaction.removeClass('selected');
94
+ }
95
+
96
+ #toggleTransaction($collapser, $expander) {
97
+ this.#hideSummaryRow($collapser);
98
+ this.#showSummaryRow($expander)
99
+ }
100
+
101
+ #hideSummaryRow($row) {
102
+ const self = this;
103
+ $row.fadeTo(self.fadeTime, 0, function() {
104
+ $(this).slideUp(self.slideTime);
41
105
  });
42
- });
43
-
44
- $iconsLessInfo.on('click', function() {
45
- // Get the transaction object
46
- const $transaction = $(this).closest('.transaction');
47
- $transaction.removeClass('selected');
48
- // Hide the expanded transaction summary
49
- const $expandedRow = $transaction.find('.expanded');
50
- $expandedRow.fadeTo(fadeTime, 0, function() {
51
- $(this).slideUp(slideTime);
52
- })
53
- // Show the condensed transaction summary
54
- const $condensedRow = $transaction.find('.condensed');
55
- $condensedRow.slideDown(slideTime, function() {
56
- $(this).fadeTo(fadeTime, 1);
106
+ }
107
+
108
+ #showSummaryRow($row) {
109
+ const self = this;
110
+ $row.delay(self.fadeTime).slideDown(self.slideTime, function() {
111
+ $(this).fadeTo(self.fadeTime, 1);
57
112
  });
58
- });
113
+ }
114
+ }
115
+
116
+
117
+ function displaySubtransactions($transaction) {
118
+
119
+ // Execute an AJAX request to get transaction/subtransaction information
120
+ const endpoint = EXPAND_TRANSACTION_ENDPOINT;
121
+ const rawData = $transaction.data("transaction-id");
122
+ const $container = $transaction.find('.subtransaction-container');
123
+ replaceDisplayContentsAjaxRequest(endpoint, rawData, $container);
59
124
 
60
125
  }
61
126
 
62
127
 
63
- export { toggleTransactionRow };
128
+ export { TransactionToggleManager, displaySubtransactions };
@@ -11,14 +11,21 @@
11
11
  import { executeAjaxRequest } from './ajax.js';
12
12
 
13
13
 
14
- function replaceDisplayContentsAjaxRequest(endpoint, rawData, $display) {
15
-
16
- // The action is to replace the display's contents
17
- function action(response) {
18
- $display.html(response);
19
- }
20
- // Assign the response to the display object
21
- executeAjaxRequest(endpoint, rawData, action);
14
+ function replaceDisplayContentsAjaxRequest(
15
+ endpoint, rawData, $display, callback = null
16
+ ) {
17
+
18
+ // The action is to replace the display's contents
19
+ function action(response) {
20
+ $display.html(response);
21
+ // Execute the callback function, if given
22
+ if (callback != null) {
23
+ callback();
24
+ }
25
+ }
26
+
27
+ // Assign the response to the display object
28
+ executeAjaxRequest(endpoint, rawData, action);
22
29
 
23
30
  }
24
31
 
@@ -6,61 +6,68 @@
6
6
  * selection. The Ajax request is defined in its own function.
7
7
  *
8
8
  * Updates can be triggered by the following actions:
9
- * - Changing the card filters: a user can click on any of the card
10
- * filters to show or hide transactions from that card.
11
- * - Sorting the table by transaction date: a user can click on the
12
- * 'Date' column header to sort the transaction date in ascending
13
- * or descending order.
9
+ * - Changing the card filters: a user can click on any of the card
10
+ * filters to show or hide transactions from that card.
11
+ * - Sorting the table by transaction date: a user can click on the
12
+ * 'Date' column header to sort the transaction date in ascending
13
+ * or descending order.
14
14
  */
15
15
 
16
16
  import {
17
- replaceDisplayContentsAjaxRequest
17
+ TransactionToggleManager, displaySubtransactions
18
+ } from './modules/expand-transaction.js';
19
+ import {
20
+ replaceDisplayContentsAjaxRequest
18
21
  } from './modules/update-display-ajax.js';
19
22
 
20
23
 
21
24
  (function() {
22
25
 
23
- // Identify the card filters
24
- const $filterContainer = $('#card-filter');
25
- // Identify the transactions container
26
- const $container = $('.transactions-container');
26
+ // Identify the card filters
27
+ const $filterContainer = $('#card-filter');
28
+ // Identify the transactions container
29
+ const $container = $('.transactions-container');
30
+
31
+ // Send the Ajax request on click
32
+ const $filters = $filterContainer.find('.card');
33
+ $filters.on('click', function() {
34
+ updateTable();
35
+ });
27
36
 
28
- // Send the Ajax request on click
29
- const $filters = $filterContainer.find('.card');
30
- $filters.on('click', function() {
31
- updateTable();
32
- });
37
+ // Change the table ordering and send the Ajax request on click
38
+ $container.on('click', '.transactions-table .sort-button', function() {
39
+ // Identify the table sorters
40
+ const $sorters = $('.transactions-table .sort-button');
41
+ // Swap the sorter icons
42
+ $sorters.toggleClass('selected');
43
+ // Update the table
44
+ updateTable();
45
+ });
33
46
 
34
- // Change the table ordering and send the Ajax request on click
35
- $container.on('click', '.transactions-table .sort-button', function() {
36
- // Identify the table sorters
37
- const $sorters = $('.transactions-table .sort-button');
38
- // Swap the sorter icons
39
- $sorters.toggleClass('selected');
40
- // Update the table
41
- updateTable();
42
- });
47
+ function updateTable() {
48
+ // Determine the selected credit cards to use from the filters
49
+ const $selectedFilters = $filterContainer.find('.card.selected');
50
+ const cardIDs = [];
51
+ $selectedFilters.each(function() {cardIDs.push(this.dataset.cardId);});
52
+ // Determine the table ordering (ascending/descending transaction date)
53
+ const $sorter = $('.transactions-table .sort-button.selected');
54
+ let sortOrder
55
+ if ($sorter.hasClass('asc')) {
56
+ sortOrder = 'asc';
57
+ } else {
58
+ sortOrder = 'desc';
59
+ }
60
+ // Update the table with the filters and ordering
61
+ const endpoint = FILTER_ENDPOINT;
62
+ const rawData = {
63
+ 'card_ids': cardIDs,
64
+ 'sort_order': sortOrder,
65
+ };
43
66
 
44
- function updateTable() {
45
- // Determine the selected credit cards to use from the filters
46
- const $selectedFilters = $filterContainer.find('.card.selected');
47
- const cardIDs = [];
48
- $selectedFilters.each(function() {cardIDs.push(this.dataset.cardId);});
49
- // Determine the table ordering (ascending/descending transaction date)
50
- const $sorter = $('.transactions-table .sort-button.selected');
51
- let sortOrder
52
- if ($sorter.hasClass('asc')) {
53
- sortOrder = 'asc';
54
- } else {
55
- sortOrder = 'desc';
56
- }
57
- // Update the table with the filters and ordering
58
- const endpoint = FILTER_ENDPOINT;
59
- const rawData = {
60
- 'card_ids': cardIDs,
61
- 'sort_order': sortOrder,
62
- };
63
- replaceDisplayContentsAjaxRequest(endpoint, rawData, $container);
64
- }
67
+ function callback() {
68
+ const toggleManager = new TransactionToggleManager(displaySubtransactions)
69
+ }
70
+ replaceDisplayContentsAjaxRequest(endpoint, rawData, $container, callback)
71
+ }
65
72
 
66
73
  })();
@@ -1,9 +1,9 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: monopyly
3
- Version: 1.4.2
3
+ Version: 1.4.3
4
4
  Summary: A homemade personal finance manager.
5
5
  Project-URL: Download, https://pypi.org/project/monopyly
6
- Project-URL: Homepage, https://github.com/mitchnegus/monopyly
6
+ Project-URL: Homepage, http://monopyly.com
7
7
  Project-URL: Repository, https://github.com/mitchnegus/monopyly
8
8
  Project-URL: Changelog, https://github.com/mitchnegus/monopyly/blob/main/CHANGELOG.md
9
9
  Author-email: Mitch Negus <mitchnegus57@gmail.com>
@@ -22,7 +22,7 @@ Classifier: Programming Language :: Python
22
22
  Classifier: Topic :: Office/Business :: Financial
23
23
  Classifier: Topic :: Office/Business :: Financial :: Accounting
24
24
  Classifier: Topic :: Office/Business :: Financial :: Spreadsheet
25
- Requires-Python: <3.11,>=3.9
25
+ Requires-Python: <3.11,>=3.10
26
26
  Requires-Dist: authanor>=1.0.2
27
27
  Requires-Dist: flask-wtf
28
28
  Requires-Dist: flask>=2.2.2
@@ -1,9 +1,9 @@
1
1
  monopyly/README.md,sha256=T-Avdpr3whgP6g0P_w-u02CSwzBH2yRnleRrM1sKrj4,8281
2
- monopyly/__init__.py,sha256=WOvhQuMecKMRwWyZhAshJHIeMX38bWuwfo1TX4e5xj4,1778
3
- monopyly/_version.py,sha256=qg0vdz67ZWACMLJ1Z9TxEzM59ztKCQO-xgltx9gUbK0,160
2
+ monopyly/__init__.py,sha256=IJkmwjfkx-AqV_R2P6a6V_Hf7VR7HQAcIKB4atpQ9R8,1761
3
+ monopyly/_version.py,sha256=n2w3qvBPpfeEbtOODqAoRRZ_yoh4xwta8eHepGUH-co,160
4
4
  monopyly/auth/actions.py,sha256=T99eAP8dxFZMzLu2LxZFIXGYIroP8I7KJ-WJ8GJ1gws,260
5
5
  monopyly/auth/blueprint.py,sha256=r2BfSFz-n29KDvyMwbh2puvenoIddalES5joIxjYnfM,243
6
- monopyly/auth/routes.py,sha256=B3AfjrhaMjH_SVCzttZlC-WxyiX1-khrl5jUhGD1NGE,2772
6
+ monopyly/auth/routes.py,sha256=psWxQg_fGyMbBPDoS0JIcLae43DL584gcEBynbumgaw,2901
7
7
  monopyly/auth/tools.py,sha256=QrzYa5OuTxpBug2hcV5GxqrtRHp3Y5IWy90m-tdDyYA,800
8
8
  monopyly/banking/accounts.py,sha256=9tjmdY0Eyi8Q6aMhUo6kPn_D6HGA_zIBHSBaVCTikEs,9837
9
9
  monopyly/banking/actions.py,sha256=bxuNV4-a3yrw0PVkq6BZKYi9M0rmWGnH7OXaHUtI5ZI,1564
@@ -14,7 +14,7 @@ monopyly/banking/forms.py,sha256=yMJE_uQNtSaWGNV-5I3WP_LWmvpyCWJ3XyJBt21ZknY,105
14
14
  monopyly/banking/routes.py,sha256=-YPvcjdBW7svCLw-jYClhTHZYiPn5k1bokDqlFna19I,8148
15
15
  monopyly/banking/transactions.py,sha256=WAQjEZwaPLnCja5r3E95c_2KkvbQc_s7qmtKvTlID3k,8453
16
16
  monopyly/cli/apps.py,sha256=Y2IwoXzRDwGDXPO770aSYPmBwJQCxRcg8MH6SJfr5_c,2688
17
- monopyly/cli/run.py,sha256=I4zLMezbO4ykNVcm0lz66kDWQHnpwVgrx6PmNP790OE,3371
17
+ monopyly/cli/run.py,sha256=9ILH7hR3PaEDm6KPIkUJUNEADjLucM09iozwgwYstr8,3750
18
18
  monopyly/common/transactions.py,sha256=c7OUUI4VDh3byORPoIC8GFScNuajBofBHshmfXRi1fI,12194
19
19
  monopyly/common/utils.py,sha256=l10-pioN_03nqs_hgF8rzAlWA0V62W5k7iIrXQZYUd8,5775
20
20
  monopyly/common/forms/__init__.py,sha256=6iFTlcoaQmCbrjS1KfFhWXQUfyqnA-vKPMVxLyJMlXY,120
@@ -23,8 +23,8 @@ monopyly/common/forms/fields.py,sha256=tJ4Xqrm7y6dYNLzpsq85lFxN20V6cDAfUF6DstzUV
23
23
  monopyly/common/forms/utils.py,sha256=wHkLP7u5m2uuglunXR22TablKB7Uoj-UWs2rYkJzhqM,5685
24
24
  monopyly/common/forms/validators.py,sha256=dM1WHEJTWpSH2u4oxU3PyIO7lY4fyN6PtRsUS8Ie0cI,1204
25
25
  monopyly/config/__init__.py,sha256=pW2lHNhsdM2gRjLAWumnLUHZMAOEdprX4aXaONwo6AY,73
26
- monopyly/config/default_settings.py,sha256=U_2YFijuZiVBAbmMW80FcUjju--K5hsCiLYGuTnfNMY,1804
27
- monopyly/config/settings.py,sha256=hSfqClto0_MtQH0E3Ry5LkEI2tqkdR-1vE6-GoIGUQw,1995
26
+ monopyly/config/default_settings.py,sha256=ZMKM20TPRymOXA21o3VcTNc0yQyPG5iGtwRe7_tMtQU,1828
27
+ monopyly/config/settings.py,sha256=xOgnXypQPa0TRyAR1wFItBYM7sR-EJzPPmov6X-tiwY,1983
28
28
  monopyly/core/actions.py,sha256=cUofmjHKWvdSgEQutzihFK378C5MpXl8fttcOWtMVeY,1219
29
29
  monopyly/core/blueprint.py,sha256=UevEYMNdzknzKBr31Zy5ZrGRgKI1lr4tNcFt9MV6tqA,251
30
30
  monopyly/core/context_processors.py,sha256=5zFKgd5QIDTZqqQmjHpCGhwTf1j5WNMCqGegfYRQaak,820
@@ -46,7 +46,7 @@ monopyly/database/preloads.sql,sha256=KBS_WYRofFdOVN-IgHzZhfyJrY6ZOwHeExN-fQr3ht
46
46
  monopyly/database/schema.sql,sha256=cdl9b5CnYrnQ-lck147GtwArx_JJbX1vF9YYLivTeyw,4660
47
47
  monopyly/database/views.sql,sha256=UTO2QRkVTfQ12bMVkR-O6Qv80DvYo8hngPHn2A1_1F8,3853
48
48
  monopyly/static/jquery-3.7.0.min.js,sha256=04il7wcoVNR_kfD9wGOJXa7srKwhMEPkB6-NOJMQsZ8,130
49
- monopyly/static/css/style.css,sha256=7m-NyoYPzMqJoKCYBwYmjc8Bmu7ZLyi-kUaSE7WoLUw,48831
49
+ monopyly/static/css/style.css,sha256=TKU9Uzj7iEBNcTARinZ1fsTI4Y-qePHQAZdBKspSjkk,48860
50
50
  monopyly/static/favicon/browserconfig.xml,sha256=Zt_AVOxiritWWXoUwPsHpx4vu4kM_butdFVzoYCYbM8,315
51
51
  monopyly/static/favicon/favicon-114.png,sha256=kjElVFiix-kFCMdADkLpJsi8kL3GDsFm85oJhyCH-C0,20601
52
52
  monopyly/static/favicon/favicon-120.png,sha256=g4uzHMdW0MlJhcgWfrOsj2MB2D-HdLa4t60_hvyICkM,22077
@@ -108,13 +108,13 @@ monopyly/static/js/add-transfer.js,sha256=_ywQju13wGWTeZMqJXJzVbfquQJhcbDnJQ9EC3
108
108
  monopyly/static/js/autocomplete-transaction.js,sha256=pZQ7v04WEHcJ7riPparhdF70W3ZDSz9Z0j0N_OVgZ9k,2753
109
109
  monopyly/static/js/bind-tag-actions.js,sha256=77irMXyRYuDlNMDck2TQ2WNQ9VrrZdKRDj3OchWut2s,3620
110
110
  monopyly/static/js/create-balance-chart.js,sha256=2g5JEVWmoKwqKIvkMu4hjE2iayt74w8jqFRkElbCfEQ,2429
111
- monopyly/static/js/define-filter.js,sha256=w6DStIvMA4anX5uB309akdJzybi4cJ47DTbziJ1LTag,1136
111
+ monopyly/static/js/define-filter.js,sha256=CRnXOAHAF8pNEd0YlWAkZ_Bs3TaIDHZlrIhEH-NzskM,1134
112
112
  monopyly/static/js/display-new-account-type-inputs.js,sha256=iHh7zSnyHc_-FIPO1Uuffjd8mFvfqfECMzO34FB_WF4,555
113
113
  monopyly/static/js/display-new-bank-inputs.js,sha256=yI6wOof9aMI_8k06hSzPszzb1SOvf0WTHyEwiiJnIt4,472
114
114
  monopyly/static/js/display-new-credit-account-inputs.js,sha256=iDlAANPZWQ2pjBcNJ8KvYn91DwBxz-hr4FzKCTayXaY,798
115
115
  monopyly/static/js/expand-bank-account.js,sha256=sz5Cj5c8pW0lXYqqurrPWr-HZKNjrTzDffwTZR8eKyg,596
116
116
  monopyly/static/js/expand-bank.js,sha256=vb1DTCOidQgQzX0FC-7Zwk-Poc-e38mpORgWG_LtczM,558
117
- monopyly/static/js/expand-transaction.js,sha256=Z13sXURVYS1qq0XQlo6GDzImWbDcPt0L46Y7-UhgHKk,1006
117
+ monopyly/static/js/expand-transaction.js,sha256=bQYnP8rNvS5mjDpt0RRzG5Rgu1DVKdUHjNuoISv9-vI,596
118
118
  monopyly/static/js/flip-card.js,sha256=4a65JFO7kf4qzZ-8wvWiiO_BwZpiWO2cHHzZugXRoAQ,720
119
119
  monopyly/static/js/hide-homepage-block.js,sha256=Yw3m5sc5dO6pDh2VUzJu1re4NXZcuSLSMs6Acou_rHo,495
120
120
  monopyly/static/js/infer-card.js,sha256=WIDXWhfF4gXdlRCo2OA0IpSsszxDTkV7ZSb6Qo7pheA,1790
@@ -126,16 +126,16 @@ monopyly/static/js/update-bank-name.js,sha256=4nEkCTEK32y9v7WAgjQymKFxM_HTFRwdfG
126
126
  monopyly/static/js/update-card-status.js,sha256=kvTL_jcRbbkOXI8aqkli09b1oYKIQyxvaXlaI73_QYQ,1296
127
127
  monopyly/static/js/update-statement-parameters.js,sha256=Mb8WN1BZZeoGn-9TTDDU_vULBemttersznpjQksT5X8,792
128
128
  monopyly/static/js/update-statements-display.js,sha256=aaOa254und1lkzGIL8uDiezGpY6iUqKFtxTWdfRBFQA,1321
129
- monopyly/static/js/update-transactions-display.js,sha256=YvvecMXThjOCLmmRZtm7zf9VWTvYzSIobDmVyN8T9U8,2113
129
+ monopyly/static/js/update-transactions-display.js,sha256=LvE0pu4rO0SmilhejcXfeoUWvnj3YF6KMPj2Al9Ovu8,2408
130
130
  monopyly/static/js/modules/ajax.js,sha256=nIVPaedJ-KanhEqsF74K5Zo89SFHg1eEC7FFa4etbNw,759
131
131
  monopyly/static/js/modules/autocomplete-input.js,sha256=cJJSP-pv7F9SL6cCudYMjMKIp7h7YzFrmeKg00tPPNo,8035
132
132
  monopyly/static/js/modules/expand-box-row.js,sha256=KO7ojKhEYB52wQLDHB2hRUEGGtukjpdpHMJMNM5nr40,708
133
- monopyly/static/js/modules/expand-transaction.js,sha256=pACymCQYmk7ALlwqSRVYkCCq6_nVU6XqcijhYFBWqhI,2195
133
+ monopyly/static/js/modules/expand-transaction.js,sha256=T5Bvm68d-0Nf_OEM7_cnrEvBeW_ERVGIJfdBpgcm9TI,3809
134
134
  monopyly/static/js/modules/manage-acquisition-form.js,sha256=hJCg5Fc2UXDgRL-jFIirKeYQ4vFvlG6IfLE_zH_Ety0,2089
135
135
  monopyly/static/js/modules/manage-overlays.js,sha256=gCE1qTT_0RG6a5OX9PrFOc-KLmqz4l8bC8HugsoAkiI,1848
136
136
  monopyly/static/js/modules/manage-subforms.js,sha256=-yKA7l8ZI0294auTI307LrKkw_Bl6I8suwK4VLuLhMc,2197
137
137
  monopyly/static/js/modules/update-database-widget.js,sha256=S67hmqaGwzbPy94IjYrag0ZPOur4r5y_tb3_5t7xuYI,1581
138
- monopyly/static/js/modules/update-display-ajax.js,sha256=QSRDK11Rga2KV4rybb8qOgIB815_Zdlq9Xz90DOyzKY,750
138
+ monopyly/static/js/modules/update-display-ajax.js,sha256=MJBiRMmeIHRG7lLbqIcXkUecKNNMFFVJXwhs_N8LKl0,878
139
139
  monopyly/templates/credits.html,sha256=U2lOe7XrW1Rt9DCvo7pRxHDzRzBnYxHjX3cS5z36NI8,506
140
140
  monopyly/templates/index.html,sha256=czjm5IfP20tib0rlxde2TTKdr5u5zfjDLTrQAbbxJ88,4309
141
141
  monopyly/templates/layout.html,sha256=ETQ7fNC4H0JjZZTnamZoJKwXbsXEHW72ZhahOER3NkQ,4741
@@ -197,9 +197,9 @@ monopyly/templates/credit/transactions_table/condensed_row_content.html,sha256=W
197
197
  monopyly/templates/credit/transactions_table/expanded_row_content.html,sha256=oL1BqlEC3H6s3fSI9Vb65DLL-P9OPliPqqiGL4av4Xs,1971
198
198
  monopyly/templates/credit/transactions_table/transaction_field_titles.html,sha256=km-3YEDJaygwcKV-rwYnrE7xF8u4Z7jCBsk0Ia-LO-M,758
199
199
  monopyly/templates/credit/transactions_table/transactions.html,sha256=tcppv0qNV-Qq6U5jfxoNyGKPXmyV9h9nR6rw4jXfBsY,481
200
- monopyly-1.4.2.dist-info/METADATA,sha256=9kupYGGnM1eAhyoNbI0cyE3ZYEtBLS8Tlbi0dwiWpk0,10182
201
- monopyly-1.4.2.dist-info/WHEEL,sha256=Fd6mP6ydyRguakwUJ05oBE7fh2IPxgtDN9IwHJ9OqJQ,87
202
- monopyly-1.4.2.dist-info/entry_points.txt,sha256=ANAwWNF6IG83opRITM2P9i_im_b6qLdG1n7dAcS2ZNU,51
203
- monopyly-1.4.2.dist-info/licenses/COPYING,sha256=5X8cMguM-HmKfS_4Om-eBqM6A1hfbgZf6pfx2G24QFI,35150
204
- monopyly-1.4.2.dist-info/licenses/LICENSE,sha256=94rIicMccmTPhqXiRLV9JsU8P2ocMuEUUtUpp6LPKiE,253
205
- monopyly-1.4.2.dist-info/RECORD,,
200
+ monopyly-1.4.3.dist-info/METADATA,sha256=7z4oX_MQ_eKQI6N3a2I0DJdJSd_oELTsu5oCTqThomo,10164
201
+ monopyly-1.4.3.dist-info/WHEEL,sha256=Fd6mP6ydyRguakwUJ05oBE7fh2IPxgtDN9IwHJ9OqJQ,87
202
+ monopyly-1.4.3.dist-info/entry_points.txt,sha256=ANAwWNF6IG83opRITM2P9i_im_b6qLdG1n7dAcS2ZNU,51
203
+ monopyly-1.4.3.dist-info/licenses/COPYING,sha256=5X8cMguM-HmKfS_4Om-eBqM6A1hfbgZf6pfx2G24QFI,35150
204
+ monopyly-1.4.3.dist-info/licenses/LICENSE,sha256=94rIicMccmTPhqXiRLV9JsU8P2ocMuEUUtUpp6LPKiE,253
205
+ monopyly-1.4.3.dist-info/RECORD,,