monopyly 1.5.1__py3-none-any.whl → 1.6.0__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.
Files changed (97) hide show
  1. monopyly/CHANGELOG.md +27 -0
  2. monopyly/README.md +3 -3
  3. monopyly/__init__.py +22 -27
  4. monopyly/_version.py +2 -2
  5. monopyly/auth/blueprint.py +2 -0
  6. monopyly/auth/routes.py +2 -3
  7. monopyly/banking/accounts.py +7 -7
  8. monopyly/banking/actions.py +20 -17
  9. monopyly/banking/banks.py +1 -1
  10. monopyly/banking/blueprint.py +2 -0
  11. monopyly/banking/filters.py +6 -6
  12. monopyly/banking/forms.py +3 -5
  13. monopyly/banking/routes.py +72 -10
  14. monopyly/banking/transactions.py +15 -7
  15. monopyly/common/forms/__init__.py +8 -0
  16. monopyly/common/forms/_forms.py +1 -2
  17. monopyly/common/forms/fields.py +0 -2
  18. monopyly/common/forms/utils.py +1 -1
  19. monopyly/common/transactions.py +89 -14
  20. monopyly/core/actions.py +2 -8
  21. monopyly/core/blueprint.py +2 -0
  22. monopyly/core/filters.py +0 -2
  23. monopyly/core/routes.py +1 -1
  24. monopyly/credit/accounts.py +1 -1
  25. monopyly/credit/actions.py +4 -5
  26. monopyly/credit/blueprint.py +2 -0
  27. monopyly/credit/cards.py +7 -3
  28. monopyly/credit/forms.py +3 -5
  29. monopyly/credit/routes.py +65 -87
  30. monopyly/credit/statements.py +1 -1
  31. monopyly/credit/transactions/__init__.py +2 -0
  32. monopyly/credit/transactions/_transactions.py +18 -8
  33. monopyly/credit/transactions/activity/__init__.py +6 -0
  34. monopyly/credit/transactions/activity/parser.py +0 -1
  35. monopyly/credit/transactions/activity/reconciliation.py +25 -4
  36. monopyly/database/__init__.py +1 -59
  37. monopyly/database/models.py +198 -276
  38. monopyly/database/preloads.sql +6 -1
  39. monopyly/scripts/screenshot_application.py +100 -0
  40. monopyly/static/chartist-1.5.0.min.js +8 -0
  41. monopyly/static/css/style.css +35 -14
  42. monopyly/static/img/about/bank-account-details.png +0 -0
  43. monopyly/static/img/about/bank-account-summaries.png +0 -0
  44. monopyly/static/img/about/bank-accounts.png +0 -0
  45. monopyly/static/img/about/credit-account-details.png +0 -0
  46. monopyly/static/img/about/credit-statement-details.png +0 -0
  47. monopyly/static/img/about/credit-transactions.png +0 -0
  48. monopyly/static/img/about/homepage-user.png +0 -0
  49. monopyly/static/img/about/homepage.png +0 -0
  50. monopyly/static/jquery-3.7.1.min.js +2 -0
  51. monopyly/static/js/add-transfer.js +8 -9
  52. monopyly/static/js/bind-tag-actions.js +6 -0
  53. monopyly/static/js/create-balance-chart.js +2 -2
  54. monopyly/static/js/create-category-chart.js +1 -1
  55. monopyly/static/js/load-more-transactions.js +27 -0
  56. monopyly/static/js/modules/expand-transaction.js +7 -6
  57. monopyly/static/js/modules/update-display-ajax.js +20 -1
  58. monopyly/static/js/update-transactions-display.js +8 -2
  59. monopyly/templates/banking/account_page.html +15 -16
  60. monopyly/templates/banking/account_summaries.html +2 -2
  61. monopyly/templates/banking/account_summary.html +1 -1
  62. monopyly/templates/banking/accounts_page.html +2 -2
  63. monopyly/templates/banking/transactions_table/table.html +3 -0
  64. monopyly/templates/banking/transactions_table/transactions.html +0 -1
  65. monopyly/templates/common/tag_tree.html +25 -0
  66. monopyly/templates/{credit → common}/tags_page.html +7 -3
  67. monopyly/templates/common/transactions_table/linked_bank_transaction.html +2 -2
  68. monopyly/templates/common/transactions_table/table.html +6 -0
  69. monopyly/templates/common/transactions_table/transactions.html +9 -15
  70. monopyly/templates/core/index.html +112 -101
  71. monopyly/templates/core/profile.html +1 -1
  72. monopyly/templates/credit/statement_page.html +2 -2
  73. monopyly/templates/credit/statement_reconciliation/statement_reconciliation_inquiry.html +1 -1
  74. monopyly/templates/credit/statement_reconciliation/statement_reconciliation_page.html +3 -3
  75. monopyly/templates/credit/statement_summary.html +2 -2
  76. monopyly/templates/credit/transaction_submission_page.html +3 -3
  77. monopyly/templates/credit/transactions_page.html +19 -3
  78. monopyly/templates/credit/transactions_table/condensed_row_content.html +2 -3
  79. monopyly/templates/credit/transactions_table/expanded_row_content.html +5 -5
  80. monopyly/templates/credit/transactions_table/table.html +3 -0
  81. monopyly/templates/credit/transactions_table/transactions.html +0 -1
  82. monopyly/templates/layout.html +9 -4
  83. {monopyly-1.5.1.dist-info → monopyly-1.6.0.dist-info}/METADATA +12 -13
  84. {monopyly-1.5.1.dist-info → monopyly-1.6.0.dist-info}/RECORD +88 -87
  85. monopyly-1.6.0.dist-info/entry_points.txt +3 -0
  86. monopyly/cli/apps.py +0 -108
  87. monopyly/cli/launch.py +0 -135
  88. monopyly/config/__init__.py +0 -1
  89. monopyly/config/default_settings.py +0 -56
  90. monopyly/config/settings.py +0 -59
  91. monopyly/static/jquery-3.7.0.min.js +0 -2
  92. monopyly/templates/credit/tag_tree/subtag_tree.html +0 -22
  93. monopyly/templates/credit/tag_tree/tag_tree.html +0 -13
  94. monopyly-1.5.1.dist-info/entry_points.txt +0 -2
  95. {monopyly-1.5.1.dist-info → monopyly-1.6.0.dist-info}/WHEEL +0 -0
  96. {monopyly-1.5.1.dist-info → monopyly-1.6.0.dist-info}/licenses/COPYING +0 -0
  97. {monopyly-1.5.1.dist-info → monopyly-1.6.0.dist-info}/licenses/LICENSE +0 -0
@@ -43,11 +43,11 @@
43
43
  <div id="receipt-card">
44
44
  <div class="receipt-item">
45
45
  <div class="receipt-key">Card:</div>
46
- <div class="receipt-value">{{ transaction.statement.card.account.bank.bank_name }} ****-{{ transaction.statement.card.last_four_digits }}</div>
46
+ <div class="receipt-value">{{ transaction.statement_view.card.account.bank.bank_name }} ****-{{ transaction.statement_view.card.last_four_digits }}</div>
47
47
  </div>
48
48
  <div class="receipt-item">
49
49
  <div class="receipt-key">Statement Date:</div>
50
- <div class="receipt-value">{{ transaction.statement.issue_date }}</div>
50
+ <div class="receipt-value">{{ transaction.statement_view.issue_date }}</div>
51
51
  </div>
52
52
  </div>
53
53
 
@@ -62,7 +62,7 @@
62
62
  <a class="submission button" href="{{ url_for('credit.add_transaction') }}">
63
63
  Create a new transaction
64
64
  </a>
65
- <a class="submission button" href="{{ url_for('credit.add_transaction', card_id=transaction.statement.card_id, statement_id=transaction.statement_id) }}">
65
+ <a class="submission button" href="{{ url_for('credit.add_transaction', card_id=transaction.statement_view.card_id, statement_id=transaction.statement_id) }}">
66
66
  Create a new transaction on this statement
67
67
  </a>
68
68
  <a class="submission button" href="{{ url_for('credit.load_statement_details', statement_id=transaction.statement_id) }}">
@@ -1,4 +1,5 @@
1
1
  {% extends 'layout.html' %}
2
+ {% set full_view = True %}
2
3
 
3
4
 
4
5
  {% block left_sidebar %}
@@ -60,11 +61,17 @@
60
61
  </div>
61
62
 
62
63
  <div class="transactions-container">
63
- {% with full_view = True %}
64
- {% include 'credit/transactions_table/transactions.html' %}
65
- {% endwith %}
64
+ {% include 'credit/transactions_table/table.html' %}
65
+
66
+ {% if transactions|length < total_transactions %}
67
+ <div id="more-transactions" class="button">
68
+ <img class="icon" src="{{ url_for('static', filename='img/icons/plus-thick.png') }}">
69
+ <div>Load more transactions</div>
70
+ </div>
71
+ {% endif %}
66
72
  </div>
67
73
 
74
+
68
75
  <a name="bottom"></a>
69
76
 
70
77
  {% endblock %}
@@ -78,9 +85,18 @@
78
85
  const FILTER_ENDPOINT = "{{ url_for('credit.update_transactions_display') }}";
79
86
  const EXPAND_TRANSACTION_ENDPOINT = "{{ url_for('credit.expand_transaction') }}";
80
87
  const LINKED_TRANSACTION_ENDPOINT = "{{ url_for('credit.show_linked_transaction') }}";
88
+ const LOAD_TRANSACTIONS_ENDPOINT = "{{ url_for('credit.load_more_transactions') }}";
89
+ const LOAD_TRANSACTIONS_SELECTORS = {
90
+ "selected_card_ids": {{ selected_card_ids }},
91
+ "sort_order": "{{ sort_order }}",
92
+ "block_count": 1,
93
+ "full_view": {{ full_view|tojson }}
94
+ }
81
95
  </script>
82
96
  <script type="module" src="{{ url_for('static', filename='js/update-transactions-display.js') }}">
83
97
  </script>
98
+ <script type="module" src="{{ url_for('static', filename='js/load-more-transactions.js') }}">
99
+ </script>
84
100
  <script type="module" src="{{ url_for('static', filename='js/expand-transaction.js') }}">
85
101
  </script>
86
102
  <script type="module" src="{{ url_for('static', filename='js/show-linked-transaction.js') }}">
@@ -19,8 +19,7 @@
19
19
 
20
20
  {% if full_view %}
21
21
  <div class="card column">
22
- <span class="bank">{{ transaction.statement.card.account.bank.bank_name }}</span>
23
- -<span class="digits">{{ transaction.statement.card.last_four_digits }}</span>
22
+ <span class="bank">{{ transaction.statement_view.card.account.bank.bank_name }}</span>
23
+ -<span class="digits">{{ transaction.statement_view.card.last_four_digits }}</span>
24
24
  </div>
25
25
  {% endif %}
26
-
@@ -46,21 +46,21 @@
46
46
  <a href="{{ url_for('credit.load_statement_details', statement_id=transaction.statement_id) }}">
47
47
  <img src="{{ url_for('static', filename='img/statement.png') }}" />
48
48
  <div class="date">
49
- <div class="month">{{ transaction.statement.issue_date.strftime('%b')|upper }}</div>
50
- <div class="year">{{ transaction.statement.issue_date.year }}</div>
49
+ <div class="month">{{ transaction.statement_view.issue_date.strftime('%b')|upper }}</div>
50
+ <div class="year">{{ transaction.statement_view.issue_date.year }}</div>
51
51
  </div>
52
52
  </a>
53
53
  </div>
54
54
 
55
55
  <div class="card">
56
- <a href="{{ url_for('credit.load_account', account_id=transaction.statement.card.account_id) }}">
56
+ <a href="{{ url_for('credit.load_account', account_id=transaction.statement_view.card.account_id) }}">
57
57
  {% with %}
58
58
  {% set img_base = url_for('static', filename='img/cards/') %}
59
- {% set card_url = img_base + transaction.statement.card.account.bank.bank_name.lower() + '-card.png' %}
59
+ {% set card_url = img_base + transaction.statement_view.card.account.bank.bank_name.lower() + '-card.png' %}
60
60
  {% set template_url = img_base + 'template-card.png' %}
61
61
  <img class="card-background" src="{{ card_url }}" onerror="if (this.src != '{{ template_url }}') this.src = '{{ template_url }}'" />
62
62
  <div class="card-number">
63
- {{ transaction.statement.card.last_four_digits }}
63
+ {{ transaction.statement_view.card.last_four_digits }}
64
64
  </div>
65
65
  {% endwith %}
66
66
  </a>
@@ -0,0 +1,3 @@
1
+ {% set field_title_template = 'credit/transactions_table/transaction_field_titles.html' %}
2
+ {% set transactions_template = 'credit/transactions_table/transactions.html' %}
3
+ {% include 'common/transactions_table/table.html' %}
@@ -1,4 +1,3 @@
1
- {% set field_title_template = 'credit/transactions_table/transaction_field_titles.html' %}
2
1
  {% set condensed_row_content_template = 'credit/transactions_table/condensed_row_content.html' %}
3
2
  {% set expanded_row_content_template = 'credit/transactions_table/expanded_row_content.html' %}
4
3
  {% set update_transaction_function = 'credit.update_transaction' %}
@@ -33,11 +33,16 @@
33
33
  <meta name="msapplication-config" content="{{ url_for('static', filename='favicon/browserconfig.xml') }}" />
34
34
  <!-- ****** faviconit.com favicons ****** -->
35
35
  <!-- Use Google JQuery CDN -->
36
- <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.0/jquery.min.js"></script>
37
- <script>window.jQuery || document.write('<script src="{{ url_for('static', filename='jquery-3.7.0.min.js') }}"><\/script>')</script>
36
+ <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
37
+ <script>
38
+ window.jQuery || document.write('<script src="{{ url_for('static', filename='jquery-3.7.1.min.js') }}"><\/script>')
39
+ </script>
38
40
  <!-- Use Chartist via CDN -->
39
- <link rel="stylesheet" href="//cdn.jsdelivr.net/chartist.js/latest/chartist.min.css" />
40
- <script src="//cdn.jsdelivr.net/chartist.js/latest/chartist.min.js"></script>
41
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/chartist@1.5.0/dist/index.min.css" />
42
+ <script src="https://cdn.jsdelivr.net/npm/chartist@1.5.0/dist/index.umd.min.js"></script>
43
+ <script>
44
+ window.Chartist || document.write('<script src="{{ url_for('static', filename='chartist-1.5.0.min.js') }}"><\/script>')
45
+ </script>
41
46
  </head>
42
47
  <body>
43
48
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: monopyly
3
- Version: 1.5.1
3
+ Version: 1.6.0
4
4
  Summary: A homemade personal finance manager.
5
5
  Project-URL: Download, https://pypi.org/project/monopyly
6
6
  Project-URL: Homepage, http://monopyly.com
@@ -22,17 +22,16 @@ 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.10
26
- Requires-Dist: authanor==1.1.1
27
- Requires-Dist: flask-wtf==1.2.1
28
- Requires-Dist: flask==3.0.3
29
- Requires-Dist: fuisce==1.0.2
25
+ Requires-Python: >=3.10
26
+ Requires-Dist: dry-foundation==1.4.1
27
+ Requires-Dist: flask-wtf==1.2.2
28
+ Requires-Dist: flask==3.1.2
30
29
  Requires-Dist: gunicorn==23.0.0
31
- Requires-Dist: markdown==3.7
32
- Requires-Dist: nltk==3.9.1
30
+ Requires-Dist: markdown==3.9
31
+ Requires-Dist: nltk==3.9.2
33
32
  Requires-Dist: python-dateutil==2.9.0
34
- Requires-Dist: rich==13.8.1
35
- Requires-Dist: sqlalchemy==2.0.35
33
+ Requires-Dist: rich==14.1.0
34
+ Requires-Dist: sqlalchemy==2.0.43
36
35
  Description-Content-Type: text/markdown
37
36
 
38
37
  <div id="header">
@@ -64,10 +63,10 @@ The package requires a recent version of Python (3.10+).
64
63
 
65
64
  ## Getting started
66
65
 
67
- Once the package is properly installed, run the app in local mode from the command line (the default options should be sensible, but you may customize the host and port if necessary):
66
+ Once the package is properly installed, launch the app in local mode from the command line (the default options should be sensible, but you may customize the host and port if necessary):
68
67
 
69
68
  ```
70
- $ monopyly local --browser [--host HOST] [--port PORT]
69
+ $ monopyly launch local --browser [--host HOST] [--port PORT]
71
70
  ```
72
71
 
73
72
  Local mode indicates that the app is just going to be run using a locally hosted server, accessible to just your machine.
@@ -160,7 +159,7 @@ Card balances are also visible by visiting the pages for individual statements.
160
159
  A full history of statements for each card is available off the homepage.
161
160
  Each statement's page gives the statement's balance, transactions, and due date.
162
161
 
163
- <img class="screenshot" src="https://raw.githubusercontent.com/mitchnegus/monopyly/main/monopyly/static/img/about/statement-details.png" alt="statement details" width="800px" />
162
+ <img class="screenshot" src="https://raw.githubusercontent.com/mitchnegus/monopyly/main/monopyly/static/img/about/credit-statement-details.png" alt="statement details" width="800px" />
164
163
 
165
164
  Payments can be made directly from a statement's page and can be linked to a bank account in the _Monopyly_ system for simplified tracking.
166
165
  (Note that even linked transactions must be edited independently, as there are times when a user may wish to have separate values for linked transactions. For example, a credit card payment may be processed on a given date while it is only registered as a bank account transaction several days later.)
@@ -1,58 +1,55 @@
1
- monopyly/CHANGELOG.md,sha256=gRCnpb-vMJfzcTbFQ0dXXHsAdMy6O2ZpM52JZpkBiYM,8167
2
- monopyly/README.md,sha256=cm1wli7E-xybYoJr-tsrNgfIO6TPrLsraMUSO26D6xk,9028
3
- monopyly/__init__.py,sha256=2UPhNvpvhuafUZwgSGJEIaOj9LIXzrRO-S8dfB4-FeQ,2203
4
- monopyly/_version.py,sha256=W6YuN1JOd6M-rSt9HDXK91AutRDYXTjJT_LQg3rCsjk,411
1
+ monopyly/CHANGELOG.md,sha256=A2g6f7hzAPPlLvovUvPsT_SgCqi-L3CPMFb3W3P7vp0,9540
2
+ monopyly/README.md,sha256=TBuObVJnYFYIiSvYUrcAsCtXCUz7D9ZpIHmhDzdPD9k,9045
3
+ monopyly/__init__.py,sha256=fC8Z7V4uGJMPfA4MeC94EPA8Tq5qgUE33vLngYg2ut8,2046
4
+ monopyly/_version.py,sha256=Ry70pc5l-IBhT9gahlkNwZPp4g0CzVEWqsat9H-UASY,411
5
5
  monopyly/auth/actions.py,sha256=uwXg0LVz3QVJxKkiI-YCJMT8OSjUK7R-aEy-XTM0Ghs,702
6
- monopyly/auth/blueprint.py,sha256=sFbmTvSBhjv1pn2gJLH5J6zanPLuemmWbgEj5ZKCiTY,244
7
- monopyly/auth/routes.py,sha256=bGuKDnyo0t918Gx_OeCbN51pJFhUsPyZ-TSPUCFuMnY,3375
6
+ monopyly/auth/blueprint.py,sha256=xA2vC10uu0ekFYPj0q0z2er1-v0G7juVI35RKNN0GQw,266
7
+ monopyly/auth/routes.py,sha256=V9c0omnvLKOp-B5EL14waUF-4QrkoriFVKMjPaRph2w,3345
8
8
  monopyly/auth/tools.py,sha256=CDMcvRY0A-cJxvKUKOUkDzZHDxveHl-8TzhKyOzsXEs,792
9
- monopyly/banking/accounts.py,sha256=yYlXvyhLBQoBZYr_WMk6_3nxlhwU4NEkCYKv5hHFjcM,9828
10
- monopyly/banking/actions.py,sha256=NvButozWJNRuNIiyM-Gy88XLTpIjNcEGSQcLMfEwOUg,3258
11
- monopyly/banking/banks.py,sha256=X1seKJrec-o8z-bM0wVTR42vMx1q5A9Lf2jNUtINlrQ,1745
12
- monopyly/banking/blueprint.py,sha256=PDsqe4DmiT7cDYW9IxxTfizu9Lqol1Lhp7ajMK6fUuI,255
13
- monopyly/banking/filters.py,sha256=wCsAUh592B5BmGFC9NqmrJZ0NdQZi21hvy0QsKqhgLg,685
14
- monopyly/banking/forms.py,sha256=p-YGZgdKugk3VKILLiQNEH5KQmXop5G8P1Bs4sUqbK0,10506
15
- monopyly/banking/routes.py,sha256=mykWVtV_4f096-NWDWE5aPYoBvGjeNpBSyY9Kb_nQGc,8232
16
- monopyly/banking/transactions.py,sha256=2_wFXl4ZrHzLoFGz72ksYA2_8UvB0N1wtBFd8kTwTyQ,8454
17
- monopyly/cli/apps.py,sha256=4oqsrDUsD3aX90YCHIsdHQy9OHaUxkstgvR6sIDw-AY,3459
18
- monopyly/cli/launch.py,sha256=nPCW3Yx4e35sAQ_K6YH3pqmWCdvnt-NHG90hUV7QKPg,4103
19
- monopyly/common/transactions.py,sha256=AEe86_XoDHzTaGEN5ByzPo0dQD6tA9dq3M9TCHMYPvE,18080
9
+ monopyly/banking/accounts.py,sha256=Fcfo2N3KoSKW7pTbHxwUw7oAYDS4K4Af-KONSkIQ3FE,9835
10
+ monopyly/banking/actions.py,sha256=jPwLHJp2g0wpwEjaMbjnUD7iWd2ZlVYycGYTUSNs6Yw,3456
11
+ monopyly/banking/banks.py,sha256=a-GaBtLu2v-8Bl5Q3lOVKUhK9dgpHdsr1sMs0uYcLOg,1751
12
+ monopyly/banking/blueprint.py,sha256=kOV9x7UjzZasGMDBlwoBV4mDHswDxaD5cct91hD8nXU,288
13
+ monopyly/banking/filters.py,sha256=EJ9qDAqDNWINc5FZ-7nddN18QFjDcKEa2heoev7_OYY,722
14
+ monopyly/banking/forms.py,sha256=p4kWeAZeWWLThoOffFk6kCKMN0jXT8dml2ccfDLYC7Q,10450
15
+ monopyly/banking/routes.py,sha256=-sqUDsuXVQiDqG5ChVeu_UvTHoga5pGHHHbcKxdD1Bs,10394
16
+ monopyly/banking/transactions.py,sha256=WtviQ8ukZEIool9G94Q0-AOm1Fgqg2kwJTQ0SqOxGPU,8884
17
+ monopyly/common/transactions.py,sha256=Oxt1ONyhWnw7g4GxuTDndYj-uO5ZdBkPxsgBxDqlAdY,20529
20
18
  monopyly/common/utils.py,sha256=BjXhfNXGWkAPt-ebldvmZ2z00P8MhKJzjxrJJ6mzRQY,5867
21
- monopyly/common/forms/__init__.py,sha256=6iFTlcoaQmCbrjS1KfFhWXQUfyqnA-vKPMVxLyJMlXY,120
22
- monopyly/common/forms/_forms.py,sha256=wlLY9pBtFYcOEnFL_dnt62JFtbs88u_B9LXN2eTe_PA,10130
23
- monopyly/common/forms/fields.py,sha256=XgvkfszpUAZyIs-osHGFADmzuo0Ni_e78NXtG-grBdI,4082
24
- monopyly/common/forms/utils.py,sha256=QbA6253xL4J01DQNQXL-BM13MgAr_HAM93H8a9Nwh6k,5660
19
+ monopyly/common/forms/__init__.py,sha256=hq_WYBvVxMcPqG80-mxooMVYkUCvF1wT_GNuDWC3gBc,241
20
+ monopyly/common/forms/_forms.py,sha256=7E34nq1YukFLz8TVx13pB6kHtLg-hXuAnJFn5d8SHx4,10053
21
+ monopyly/common/forms/fields.py,sha256=bKADQ-HqtOXVxhsj1DraBUPXWozjubm6bC-w1yJtPIo,4009
22
+ monopyly/common/forms/utils.py,sha256=kuCvuNMQx9jY4SXKLtxa0DpNQXaq4Zmpw45Aqf1jmUM,5645
25
23
  monopyly/common/forms/validators.py,sha256=C5_NN8ktvBw6MrSXwv_x9_SQohCNmnp4brNQFELHBlI,1205
26
- monopyly/config/__init__.py,sha256=pW2lHNhsdM2gRjLAWumnLUHZMAOEdprX4aXaONwo6AY,73
27
- monopyly/config/default_settings.py,sha256=jtWz4ElasnAbfBCiRfbsYyy--L6N6jTOGRh3PNWnVj4,1829
28
- monopyly/config/settings.py,sha256=YEctSb8mRDvuMA1tTs1N7862Z2bMY7DPf0xo4Ist2pg,1984
29
- monopyly/core/actions.py,sha256=jkrR5bBN1RG1S4Gtumnk51TkCNf4gfsUZkTi8LKHVHA,4172
30
- monopyly/core/blueprint.py,sha256=pZyK8ly0UR1BbHx4xwYk1UzakzkVCS8wiMSM8XdCG2U,260
24
+ monopyly/core/actions.py,sha256=qzuL7e4QTMcYG0jaYNFuyGB6GwptrIbAzDqhz5ve0sY,4079
25
+ monopyly/core/blueprint.py,sha256=oDqVD5XA6-l--MFGPPVNgdhhT3rXNibnObpvWfIAgTI,325
31
26
  monopyly/core/context_processors.py,sha256=ByQGQpOJIpxG3WM3Kv34LbBY0H8HVeR81TDYkdOwJgs,1166
32
27
  monopyly/core/errors.py,sha256=xF4gA3Hv99op3EMV_f2CskHWVLrV-9ckaHKJMWR2h7o,200
33
- monopyly/core/filters.py,sha256=uBkNjQyqW-9RkiQG23vngnI1MZXFeh4Rhe5MQqklAEQ,1284
28
+ monopyly/core/filters.py,sha256=LMrqGgJE1sJUH0ojSVcn5ioGrY1OmE_OJtn-vEbNI10,1253
34
29
  monopyly/core/internal_transactions.py,sha256=PImeViMU9rdDDPLXld1xC6bdAoulzRDr0zci4pUQY8I,459
35
- monopyly/core/routes.py,sha256=FhXL8JrqsumxdUiGsmzSG7fim4Kz5rDxr0Az-3SmI90,2639
36
- monopyly/credit/accounts.py,sha256=otQmuTDJZYX868EZl80n89XlzfiwlnBkfSXZa65rSqI,1898
37
- monopyly/credit/actions.py,sha256=eNtowA16zfP8gmo93H9_LbARJ0JKxhihqy3OhX0bwpQ,7211
38
- monopyly/credit/blueprint.py,sha256=XbrMhtyCp2732uWPB2kjn_W8P8pH8RVTwo9P8Pt--Is,251
39
- monopyly/credit/cards.py,sha256=9Ug51aY2-G8SzooLC-FemRNeTBLd9JOpXHFW74EcdLU,5614
40
- monopyly/credit/forms.py,sha256=aGARysyBNY04hF43IgbwZfBB6ByG51oqbOivmBXOxsk,13614
41
- monopyly/credit/routes.py,sha256=weq0cdSB9eehdj1huTHBOjjCEtr3sel_82GX1BTe6EM,21977
42
- monopyly/credit/statements.py,sha256=lRcAgcr9kPnh5GCE6McWfOdY8uCgmg2j2bikSioR3HI,7219
43
- monopyly/credit/transactions/__init__.py,sha256=1Exn6T--HtwNCHzS_hDJ0ba7qCB7w_8C-yY3KSxvFKg,165
44
- monopyly/credit/transactions/_transactions.py,sha256=V4gLI6HpiuNppNV5xmJBsPU1YL59HyiNLbh3U2LAvbU,9222
45
- monopyly/credit/transactions/activity/__init__.py,sha256=Iq5KLXdCf1UCfM9qDRXbYCaz1NmgJMCApK4kGDNJISo,139
30
+ monopyly/core/routes.py,sha256=IxO1opdVQ1ad3jO-UQvx0B7Gb2IzOrX9WItwdSu5-ic,2651
31
+ monopyly/credit/accounts.py,sha256=6BvQiPvFMWqdDHp-heYXmcjgzzaGMvrHmwCoNQ3CcvM,1904
32
+ monopyly/credit/actions.py,sha256=Ba55-2i8Fh84DABshDUNTZskwQhRubsYhLlYWgN-CJY,7223
33
+ monopyly/credit/blueprint.py,sha256=mn7kI4ZAYZpOjkkCoMfW7BcZnDvUjbCvsmhDaJRKrTM,273
34
+ monopyly/credit/cards.py,sha256=8fOK_Wpgdn484OV95_JJ7hX_oyFDTHkDhETuRdKfVWU,5709
35
+ monopyly/credit/forms.py,sha256=ZcKpQ-1jl8oRUPXb_foew5I6BV3tAJMorj-KibkGYLE,13531
36
+ monopyly/credit/routes.py,sha256=h0djqZ4eVxLTMkWWuU7RM0NfZk_sa0o5XcpUe8yJZxE,21598
37
+ monopyly/credit/statements.py,sha256=_kJDqF8WT_bFaVcuklSXiqaLUtP7XSCtVmCfCEILo34,7225
38
+ monopyly/credit/transactions/__init__.py,sha256=LnixNzeUV3jzZqxB2xdxBBRu94F1oZh9SynkrgvGGPI,245
39
+ monopyly/credit/transactions/_transactions.py,sha256=4K1_QUYUMAikaYicXsm5GsojUL5UjA6x8Jjemf2rbwY,9621
40
+ monopyly/credit/transactions/activity/__init__.py,sha256=hT1VaqPQQz0qxpgJyy46kSHbiBE5crg4pxW2Xvg_2KE,248
46
41
  monopyly/credit/transactions/activity/data.py,sha256=6ND7fz5L1aH2g_2drGz2Xf7maUaJ6RyItLdBeWXBIlA,5849
47
- monopyly/credit/transactions/activity/parser.py,sha256=yBEP3jG36iixhA0KN8TXdvE55Jp54L6TMR8xlOjqJMY,11624
48
- monopyly/credit/transactions/activity/reconciliation.py,sha256=cHcqXAp63hHrNkeb3WoX0bGnJbzrOfe6uKF6L2CF9y0,18798
49
- monopyly/database/__init__.py,sha256=tlZsXmzH8hB5m_RASbKTjPRqLel-xbymqrzo0TPoFCk,3402
50
- monopyly/database/models.py,sha256=nnO6dyf7IJOp3dwIoPrWECnWlRPdocfrMqSD_tT1OSg,15319
51
- monopyly/database/preloads.sql,sha256=KBS_WYRofFdOVN-IgHzZhfyJrY6ZOwHeExN-fQr3htU,363
42
+ monopyly/credit/transactions/activity/parser.py,sha256=bwJF-Z3kDJnUTQT5iAf88SNsITMnf3dwpA3hE_fKC9M,11581
43
+ monopyly/credit/transactions/activity/reconciliation.py,sha256=1CIeaVBhJ-2wufyk7OBo40X6Ql627_I-rZ8axOFeFpM,19449
44
+ monopyly/database/__init__.py,sha256=GMbtb8FQM_gdvClzVLue7g1dkQIOfc0YnA_vRK-9edI,1582
45
+ monopyly/database/models.py,sha256=9QCZZNXfe0JWtX33Jtk94m0cEBd-Lxk1SUWeawWgbDw,14667
46
+ monopyly/database/preloads.sql,sha256=M4rMl5fMFBRcB3eLszGFdHES9lO6NbRm0U0r3IqpCyU,484
52
47
  monopyly/database/schema.sql,sha256=cdl9b5CnYrnQ-lck147GtwArx_JJbX1vF9YYLivTeyw,4660
53
48
  monopyly/database/views.sql,sha256=UTO2QRkVTfQ12bMVkR-O6Qv80DvYo8hngPHn2A1_1F8,3853
54
- monopyly/static/jquery-3.7.0.min.js,sha256=2Pmvv0kuTBOenSvLm6bvfBSSHrUJ-3A7x6P5Ebd07_g,87462
55
- monopyly/static/css/style.css,sha256=_XOOIINtBFXZXFZZD1SKcTZkvsHegkBDdlX9zNew7ZQ,73560
49
+ monopyly/scripts/screenshot_application.py,sha256=CTp9LwCji17H5y4hxzyqzhj6-SVbrb3dLee_Eii0bTg,3560
50
+ monopyly/static/chartist-1.5.0.min.js,sha256=Rj91J3cXWPKNNW_89vKXqUIDA6LNgJDx8qEBTttcSvs,38065
51
+ monopyly/static/jquery-3.7.1.min.js,sha256=_JqT3SQfawRcv_BIHPThkBvs0OEvtFFmqPF_lYI_Cxo,87533
52
+ monopyly/static/css/style.css,sha256=0sX-6PyeEOjDJA-XjZCb-s6AWmGVn9f5Q_foN497B9I,73979
56
53
  monopyly/static/favicon/browserconfig.xml,sha256=Zt_AVOxiritWWXoUwPsHpx4vu4kM_butdFVzoYCYbM8,315
57
54
  monopyly/static/favicon/favicon-114.png,sha256=kjElVFiix-kFCMdADkLpJsi8kL3GDsFm85oJhyCH-C0,20601
58
55
  monopyly/static/favicon/favicon-120.png,sha256=g4uzHMdW0MlJhcgWfrOsj2MB2D-HdLa4t60_hvyICkM,22077
@@ -75,13 +72,14 @@ monopyly/static/favicon/favicon-96.png,sha256=I4up74EQSFN-PqnWDX4ZjuUd3AAu8UCxjo
75
72
  monopyly/static/favicon/favicon.ico,sha256=l0APKVVdnMLqqL8xIfQpprpgbGriR2U2RU1wlRQDr1Y,22382
76
73
  monopyly/static/favicon/favicon.png,sha256=_HZfmjDU8hMVlkWuzAQrT7XTbUareW-K6o8mYPolYQo,263409
77
74
  monopyly/static/img/statement.png,sha256=O1qdR0enBAmtPMJPphJ7tEllBq2xrpRTrASMS1n8jAI,19863
78
- monopyly/static/img/about/bank-account-details.png,sha256=pv1ZTMyhJGCfjBJxVrueexCVSxTlLm_qPyUjTZOL3l0,370982
79
- monopyly/static/img/about/bank-account-summaries.png,sha256=djHqOsKNF9Jp948f9yVUJvssjMe4mnidC6UFYY2p_CE,389739
80
- monopyly/static/img/about/bank-accounts.png,sha256=4I0j4LthUCP5Flp1rnHZUGwKl2mcruYXjlrx8Q8IJos,387290
81
- monopyly/static/img/about/credit-account-details.png,sha256=FYS4MDY4M3P340oJzerQOWn2jhFEW8O60s7Bg5ciaxQ,373677
82
- monopyly/static/img/about/credit-transactions.png,sha256=tmKoyawtOkDd_1AuJugiviM0VIzoDEWXzaNfZEk7XGA,452288
83
- monopyly/static/img/about/homepage-user.png,sha256=Yp4oyxYNZXDT7GVbf-RLiaF2ragSmTpm95XeyEqpmIU,551891
84
- monopyly/static/img/about/homepage.png,sha256=KAJNBy4Hu9H0yU8ZDBRPo8u8k_CEEq1pgpzB5BTFGSM,277799
75
+ monopyly/static/img/about/bank-account-details.png,sha256=mD6Fd7GE9QkEkR3e2KHExN7hJj-gpiy0gJjB55is_PY,269666
76
+ monopyly/static/img/about/bank-account-summaries.png,sha256=Kny2rPRgk5KHUNxa-vSgd3Kcs_aMdvTcYTM6wAIcH7Y,228909
77
+ monopyly/static/img/about/bank-accounts.png,sha256=VYdTqhdc0j7ReccQkkweK_zdPhyTwkRIghTZZXTjJm0,250746
78
+ monopyly/static/img/about/credit-account-details.png,sha256=0ZgNzsxm6iZb1RnmsH_HGuHpcJUnlOK6MZIeURu2M4U,224999
79
+ monopyly/static/img/about/credit-statement-details.png,sha256=9KXgBNVHdpXLdQ7l85cF4ihVi1WXQtpiCZYscw6EJqA,313612
80
+ monopyly/static/img/about/credit-transactions.png,sha256=hQAVoZat7grpcMwMHj9TXGuS3zoTaeHFUA9vQ3QFWzM,348372
81
+ monopyly/static/img/about/homepage-user.png,sha256=fBgYk7ztgTMzJsEodJ4Z7CnG4foWKnQPWberwV_Qqzc,425319
82
+ monopyly/static/img/about/homepage.png,sha256=OFLSOlDJN3_1RpDxxmlrFarrB8VGVw03CJFncTJRu-A,178526
85
83
  monopyly/static/img/about/statement-details.png,sha256=R7gjHDvP1QKLLs4br8-Owd9O7aYpWX9Koss0YDZkY0A,434617
86
84
  monopyly/static/img/cards/chase-card.png,sha256=LWQ23qinIZQufQ9vAFqbdCm8Y0WTcy8vSPSUeVJCE2Y,325208
87
85
  monopyly/static/img/cards/discover-card.png,sha256=Ip1iSXONhC0NmH3dBKOaALxvDNfn0aGuNYCAecv_Iok,326928
@@ -110,11 +108,11 @@ monopyly/static/img/icons/statement-thick.png,sha256=3OkDcfvEgsmEgasS3cbd6lIv-Pa
110
108
  monopyly/static/img/icons/statement.png,sha256=x9y4Wqm8zMqen4Q5WkhTPQAEa3uSFfluKzU2YdKZNj8,20292
111
109
  monopyly/static/img/icons/x-thick.png,sha256=Fs9bVUFDVUCjWZQbicFGYZMcsUwerxf6KlXPSBHkKfc,38482
112
110
  monopyly/static/js/add-subtransaction.js,sha256=BoLvpahd__YHOwodqJXg10OCY7CJJX0k7yJpYAVW9iw,1465
113
- monopyly/static/js/add-transfer.js,sha256=_ywQju13wGWTeZMqJXJzVbfquQJhcbDnJQ9EC3R01xM,1384
111
+ monopyly/static/js/add-transfer.js,sha256=3ve8v-7g-LIVi9Mij68CGCLnIesjhR0vtmsnkVbtNzE,1496
114
112
  monopyly/static/js/autocomplete-transaction.js,sha256=pZQ7v04WEHcJ7riPparhdF70W3ZDSz9Z0j0N_OVgZ9k,2753
115
- monopyly/static/js/bind-tag-actions.js,sha256=ReOHoY9Ngsqe7rvH0x0TvgNNbmEuAOKx3HIdLSYXMhk,3619
116
- monopyly/static/js/create-balance-chart.js,sha256=xaRxJvPSL0j5JKG1uYI7deYfqfc2Tw4mUdJk3rSlk3I,2446
117
- monopyly/static/js/create-category-chart.js,sha256=h17FlFj2eo1MK2VXwuw7U58dWDj4iukYuLnllMOuGhU,514
113
+ monopyly/static/js/bind-tag-actions.js,sha256=ev0WMvkatJFlvvTyMuGAcstYJ2cziOKXZzXLmhDdqr0,3776
114
+ monopyly/static/js/create-balance-chart.js,sha256=LX4mbEPf1b6QayEkAj1L1b-zPE4Pxr84V4rQ_Es2OqA,2452
115
+ monopyly/static/js/create-category-chart.js,sha256=SfWQrs4c0QT4whr7KvrvWVdyYfeGu-ENscpoPjEYcqc,519
118
116
  monopyly/static/js/define-filter.js,sha256=nz64sha6G9QXOyVEqxd_xYK0F_fXxzXxIHiQfpvUo7A,1133
119
117
  monopyly/static/js/display-new-account-type-inputs.js,sha256=iHh7zSnyHc_-FIPO1Uuffjd8mFvfqfECMzO34FB_WF4,555
120
118
  monopyly/static/js/display-new-bank-inputs.js,sha256=yI6wOof9aMI_8k06hSzPszzb1SOvf0WTHyEwiiJnIt4,472
@@ -127,6 +125,7 @@ monopyly/static/js/hide-homepage-block.js,sha256=Yw3m5sc5dO6pDh2VUzJu1re4NXZcuSL
127
125
  monopyly/static/js/highlight-discrepant-transactions.js,sha256=jnbs6HSh4Byq46xJuDNseGHOnf_KuVH-wYRr_dsj_Y8,4188
128
126
  monopyly/static/js/infer-card.js,sha256=WIDXWhfF4gXdlRCo2OA0IpSsszxDTkV7ZSb6Qo7pheA,1790
129
127
  monopyly/static/js/infer-statement.js,sha256=ufcYJ2z6halVXpiZHviI_4JN48jOBAM4NbSDtWH9BoU,1896
128
+ monopyly/static/js/load-more-transactions.js,sha256=PhhYVW3mDQo_hYz5vhbLK-BtB1k6NluGAxPFY44rqf0,671
130
129
  monopyly/static/js/make-payment.js,sha256=fvCSHrsUuRFJ299icIklEch8SQLnYL2cfcTwkW4fzw4,3276
131
130
  monopyly/static/js/show-credit-activity-loader.js,sha256=glNYtiL4R8Rko1K6Og6KB9a7tKlbMRos35vedp42Zjk,815
132
131
  monopyly/static/js/show-linked-transaction.js,sha256=AM7d2PISUMbS2UcSNZQuW8n24pcDG0hD8BjFjAyWUOk,1085
@@ -136,28 +135,28 @@ monopyly/static/js/update-bank-name.js,sha256=4nEkCTEK32y9v7WAgjQymKFxM_HTFRwdfG
136
135
  monopyly/static/js/update-card-status.js,sha256=3Ecdz4c4KYsyaJtqU0YmiOSoLB4ceiWR6f3SCKWpCq8,1296
137
136
  monopyly/static/js/update-statement-parameters.js,sha256=Mb8WN1BZZeoGn-9TTDDU_vULBemttersznpjQksT5X8,792
138
137
  monopyly/static/js/update-statements-display.js,sha256=aaOa254und1lkzGIL8uDiezGpY6iUqKFtxTWdfRBFQA,1321
139
- monopyly/static/js/update-transactions-display.js,sha256=LvE0pu4rO0SmilhejcXfeoUWvnj3YF6KMPj2Al9Ovu8,2408
138
+ monopyly/static/js/update-transactions-display.js,sha256=6Mz_2O-fv8kjpD-_BuEVDrwATHLzh-6R-yMVm19nS6M,2725
140
139
  monopyly/static/js/use-suggested-amount.js,sha256=O8CJ-GF3YUV9cSa6hJUFGZiePWhoZxykrr5LVhA3Jls,272
141
140
  monopyly/static/js/use-suggested-merchant.js,sha256=KJdz5zYGaQlbPMdl32JY_k3wdIYrHF0QMtzqNNJC6RY,269
142
141
  monopyly/static/js/modules/ajax.js,sha256=nIVPaedJ-KanhEqsF74K5Zo89SFHg1eEC7FFa4etbNw,759
143
142
  monopyly/static/js/modules/autocomplete-input.js,sha256=cJJSP-pv7F9SL6cCudYMjMKIp7h7YzFrmeKg00tPPNo,8035
144
143
  monopyly/static/js/modules/expand-box-row.js,sha256=KO7ojKhEYB52wQLDHB2hRUEGGtukjpdpHMJMNM5nr40,708
145
- monopyly/static/js/modules/expand-transaction.js,sha256=0YqRbjtLYIs0AYUij0nFxh4gBS80O7Wk1Q3GkhCiZQU,4183
144
+ monopyly/static/js/modules/expand-transaction.js,sha256=PGW-fTgKXJUNNKnRQToanpKfrhF_6QGHvoU0ZScn1Cg,4263
146
145
  monopyly/static/js/modules/form-suggestions.js,sha256=RIeHMkHkAKDoXm5xp914GbNdIDAaKOoLEANw4oQx9nY,1341
147
146
  monopyly/static/js/modules/manage-acquisition-form.js,sha256=hJCg5Fc2UXDgRL-jFIirKeYQ4vFvlG6IfLE_zH_Ety0,2089
148
147
  monopyly/static/js/modules/manage-overlays.js,sha256=nl-UlmZh22RnX648Nb_ybpt0Wfi3xDQsM8Wg-cGPTJE,1832
149
148
  monopyly/static/js/modules/manage-subforms.js,sha256=-yKA7l8ZI0294auTI307LrKkw_Bl6I8suwK4VLuLhMc,2197
150
149
  monopyly/static/js/modules/update-database-widget.js,sha256=S67hmqaGwzbPy94IjYrag0ZPOur4r5y_tb3_5t7xuYI,1581
151
- monopyly/static/js/modules/update-display-ajax.js,sha256=MJBiRMmeIHRG7lLbqIcXkUecKNNMFFVJXwhs_N8LKl0,878
152
- monopyly/templates/layout.html,sha256=a1JQCOvlOHP1zNd64EmXrUaGQuhmrajeQCBPEVZgopE,5779
150
+ monopyly/static/js/modules/update-display-ajax.js,sha256=mku6cCHq8wf2bPFhZMTAOx4sgu8kI4iLS2S0CzwdpaY,1336
151
+ monopyly/templates/layout.html,sha256=BEjwpibxmVQ8V-YPsAegRdh_pUSRFh4ztjoWwob3x54,5964
153
152
  monopyly/templates/auth/change_password.html,sha256=yf8Zg2QYmBd9U-MHQXoI8d6pwrnWokDRjbVMxMIJTdU,652
154
153
  monopyly/templates/auth/login.html,sha256=Cr16HB8FkYb7jT4ueCsEoOtSM84Lh4e9Jombsb6UPr8,457
155
154
  monopyly/templates/auth/register.html,sha256=rZh1IUhCN_67vcSHPHm4LS1rJTo8kcaNc2EEnCTrmoQ,774
156
- monopyly/templates/banking/account_page.html,sha256=Y2lZrzXFdykDkkPK9-FktGPq6i-94hV_Me1BM-MzxXU,2002
157
- monopyly/templates/banking/account_summaries.html,sha256=GCMIFF6bYOwzPyw8gxKo8mAJ7QzmvyB2d8moEgzqki4,1139
155
+ monopyly/templates/banking/account_page.html,sha256=st8n6FnVsqUDC1xpQV_D5PC3LBH7XbN9kzRQXPBM45I,2300
156
+ monopyly/templates/banking/account_summaries.html,sha256=_NPs5Udx7mZEdKJZdKyOsSOIlbW5spXZEfwMvhFEeQE,1145
158
157
  monopyly/templates/banking/account_summaries_page.html,sha256=puBlB52WMZR_Dhz6_rSLomNa9QSChsItsshrKT5Aixs,1113
159
- monopyly/templates/banking/account_summary.html,sha256=pE5DyrLP2MYewsECpP0iVusTlIunWe4tiLjSwGMV9uA,939
160
- monopyly/templates/banking/accounts_page.html,sha256=4upvqJGWunJw3W8v_S8d7U003jff9mJ2tI7GStL-8Ms,2152
158
+ monopyly/templates/banking/account_summary.html,sha256=401NaZQJJrzYkkg3uoPDN-h0k4pnmBDkQBKthhxwAO0,944
159
+ monopyly/templates/banking/accounts_page.html,sha256=qLbCX2mT4XLcrX38A3CG6g61vnwT8mLKRciZZYbnV2g,2162
161
160
  monopyly/templates/banking/account_form/account_form.html,sha256=v8AH6DTBW-4XVffcmr-sRRBl1k0e-30Q7Vy5sXHkrPM,1226
162
161
  monopyly/templates/banking/account_form/account_form_page_new.html,sha256=aCahQlbJfIM_vzvHJb81dG_ORpXFmOw5QzYFNep7LxY,533
163
162
  monopyly/templates/banking/transaction_form/bank_info_form.html,sha256=RkEjEgbD5zw4QlvpJ6koA8TxE0ZRTGmfmCy8SC2RVd0,670
@@ -168,22 +167,26 @@ monopyly/templates/banking/transaction_form/transaction_form_page_update.html,sh
168
167
  monopyly/templates/banking/transaction_form/transfer_form.html,sha256=ar3ttK7kgEWQpvnD23-ud8OcLPgtvGDrKRIp4UWGoQw,168
169
168
  monopyly/templates/banking/transactions_table/condensed_row_content.html,sha256=5eHwrdoGxNouRWSPe-NxTtvcpiZafw1WPSR_d_O3YTc,416
170
169
  monopyly/templates/banking/transactions_table/expanded_row_content.html,sha256=WaGZ6doBs0FmCe1Bqbxb2q613D8A-idTTzxy2xF4T5g,1405
170
+ monopyly/templates/banking/transactions_table/table.html,sha256=1zxNJOOXmc6RkMkBb2f7yzGyqnOoyyJeTiXsETHprCk,226
171
171
  monopyly/templates/banking/transactions_table/transaction_field_titles.html,sha256=WvjcRAByg1xSHqfNEkcJYB1eFnNfm4-qfHZben_YApI,600
172
- monopyly/templates/banking/transactions_table/transactions.html,sha256=emId66z4LXyOF1xdiJIAwrGqE4WSY-iv03yZF4kye1k,486
172
+ monopyly/templates/banking/transactions_table/transactions.html,sha256=UuBCMXwDqKlHdxUy07O_hVQjJ8V5nhM4O5trfF4zJYg,394
173
173
  monopyly/templates/common/form_page.html,sha256=Sx2Y6dhNsjkDQBaepTBPBvVeIe7N730llhgbcAQOrCk,107
174
+ monopyly/templates/common/tag_tree.html,sha256=sCmyVNGJBaBtfuvl9PepYhfV9HPYn5aL79reGhpl6H4,644
175
+ monopyly/templates/common/tags_page.html,sha256=7w7VrxilJ0QLz_RspHLZkvy6XKib1vWYYPljEEYsxEA,803
174
176
  monopyly/templates/common/transaction_form/subform.html,sha256=BjwJA0-ZOeBhrLdZAkddl5F5ElMN2MSykD2hZu8PNEA,370
175
177
  monopyly/templates/common/transaction_form/subtransaction_subform.html,sha256=WBCGnkKNGC0x7KSJeKA1g8Xbm5sO9N3jY5Nt2WiWpUk,827
176
178
  monopyly/templates/common/transaction_form/transaction_form_page.html,sha256=gZ7uWIgaVo67m4F9cgXnrjwQ3_nEk_F2E1jT_C1yy8s,294
177
- monopyly/templates/common/transactions_table/linked_bank_transaction.html,sha256=ffqchNhXlxy-CytPFGZbathD4dOSF4Qb8MsTyCF4nqU,893
179
+ monopyly/templates/common/transactions_table/linked_bank_transaction.html,sha256=zyFdQAHnYZB4KbSFu3QEv4q4AVJQpvVAmeQwG9mum8A,913
178
180
  monopyly/templates/common/transactions_table/linked_credit_transaction.html,sha256=SpZS7CKO4IbVf2wbEi29TngIWNeVRIJZXt7ZDxCUI-M,795
179
181
  monopyly/templates/common/transactions_table/linked_transaction_overlay.html,sha256=oqXGBdQaVvS9LPUKZrCqDMLO5F9aUtf-Npf-lR7ccIQ,1119
180
182
  monopyly/templates/common/transactions_table/subtransactions.html,sha256=6vf9M2jMDVHDbGoI6GToKf1mgDw7VS1aYbNu4Ol_saw,492
183
+ monopyly/templates/common/transactions_table/table.html,sha256=5dYdxg1WOsFrc1C4GRjYFRVuwaiWx4_sYYDC-QCoxvc,117
181
184
  monopyly/templates/common/transactions_table/transaction_condensed.html,sha256=V-HAol3kEMvIiAEmCU0jmdbDwOzzoQGV3thMGxEGtXw,364
182
185
  monopyly/templates/common/transactions_table/transaction_expanded.html,sha256=mLUg9lSMEtoRwqHoheUObj-wrj9Xo2MvsBkkuZLVcHo,1261
183
- monopyly/templates/common/transactions_table/transactions.html,sha256=a0kUH1tZB9Ilsvf1MpOtRJiHB9ddFJq7q_-zPtpO4Is,531
186
+ monopyly/templates/common/transactions_table/transactions.html,sha256=yZ6AStD_aFvzfObYXsgqH6IYFnZA5SLsCSOfjGIV0Gk,433
184
187
  monopyly/templates/core/credits.html,sha256=5XO5foZ_J1RA42BEOzN20bZRcWm9xhZe125BCKudoUc,1166
185
- monopyly/templates/core/index.html,sha256=02iQ1feV47EIG2nPGR4n2ANp8L1Jg1DEC52ievARnm8,4684
186
- monopyly/templates/core/profile.html,sha256=uxHMs3hOta_ms3ZZ8JdariobFlvq4SU_cLNbhYsXJ78,2349
188
+ monopyly/templates/core/index.html,sha256=fZPEdUavOWK3F-cJws7RzAqdJ7Yl-1MY9vemQ7Ter6w,5061
189
+ monopyly/templates/core/profile.html,sha256=Gnv5wAFMerbpniKZ_TM907bauJM1YVSCzJ_X3LzeFq4,2350
187
190
  monopyly/templates/core/story.html,sha256=iEKfX1aHxXrstAeeQ6J8Gnvg1zGt95c-iLELUhG-AtE,3331
188
191
  monopyly/templates/core/errors/400.html,sha256=whUYO3b6UIQWfN8y563umccU8GLxqXu0A5nb5uNM-XY,152
189
192
  monopyly/templates/core/errors/401.html,sha256=3HH9TSDZfhyxZVcVnT0PNe524ADvEHIj6BsllQYFFOQ,154
@@ -199,36 +202,34 @@ monopyly/templates/credit/account_page.html,sha256=HxQzRfEejFXjmZwtZD-EdHipQ7zOe
199
202
  monopyly/templates/credit/card_submission_page.html,sha256=7OU6PB01jACSKSzXGySWL8ccwfCT00SeX2KkdwW3K4Q,345
200
203
  monopyly/templates/credit/cards.html,sha256=lvuKip2nHDmPi2Wj8zmO9ZXKXY22Dlv9fDrtHuYCSqA,598
201
204
  monopyly/templates/credit/cards_page.html,sha256=HTrTQwF-Y5Z9oWqt72i6HbAaRhQibTEt3TJKavm6_2M,250
202
- monopyly/templates/credit/statement_page.html,sha256=8diukPI-8ip6fDI4DRbRlEsfkKVp0OyGspfUXJpL1fg,3097
203
- monopyly/templates/credit/statement_summary.html,sha256=4DkqlN1yKIhFYFUSxmbf997Jk7SmIa110qZZZhdNkOg,2857
205
+ monopyly/templates/credit/statement_page.html,sha256=m3GlMvQUdINiwnnC8ern23lfzdKkieD7LV7Fa5RrIJY,3051
206
+ monopyly/templates/credit/statement_summary.html,sha256=8D8l2eveeD11wOflymOVcNrm5TyyazguVzUvAa7qVto,2874
204
207
  monopyly/templates/credit/statements.html,sha256=ndCGe4xEj9aFfKPSrr1fnTyKKU-KxGRLq0iJTeJnDvc,1783
205
208
  monopyly/templates/credit/statements_page.html,sha256=s_CSiRO8iTcCoEPVRF2TEOG2XNOeuGF1BSiJGhrH5O0,1458
206
- monopyly/templates/credit/tags_page.html,sha256=mKm-QxuicO5MO12JOQy7tuc8Bd9fnnKiTSHDmMP5mTI,662
207
- monopyly/templates/credit/transaction_submission_page.html,sha256=FNqvt0WB59_80GhsUrPTEbPs_ydGF0G_fnE1T13_g_A,3136
208
- monopyly/templates/credit/transactions_page.html,sha256=4Tx2yUGPUIRfz0M3vAQqjcfHAPvsVXdiD0k9N1O3B0Q,2391
209
+ monopyly/templates/credit/transaction_submission_page.html,sha256=1AcegARS6qwisDLpUtjI6U9ZSX6t9fBCmURxPWYsLD4,3156
210
+ monopyly/templates/credit/transactions_page.html,sha256=_LPFcGDrxAOls7AvSybrKrIQAAf3np9zbVI2BGK4kow,3033
209
211
  monopyly/templates/credit/card_form/card_form.html,sha256=xF7x1RBQyAfKYuW_cRxwhKhug4tum-3s0YHyP0ovhFs,1666
210
212
  monopyly/templates/credit/card_form/card_form_page_new.html,sha256=9ayX0dUEAbSSPVL3vIKIBJYkN8odL_KHOfq3fl6C8yw,525
211
213
  monopyly/templates/credit/card_form/transfer_statement_inquiry.html,sha256=LuxietZsTLF3AMqeeHqcPoAYvJX_TsJ8MlDldpZwpoQ,1228
212
214
  monopyly/templates/credit/card_graphic/card_back.html,sha256=gfr3975mziF0PCd_f2Jy83Y4ktFeFnZ1icVVpiVwoQA,889
213
215
  monopyly/templates/credit/card_graphic/card_front.html,sha256=I53u0WvrQj-m2D-fkcga0GRketfpMuMXNM6Rs0e5CNA,679
214
216
  monopyly/templates/credit/statement_reconciliation/discrepant_records.html,sha256=IMnLShpED8CcXYA3jrQoz4Fc2v0s6i1Fl1OAUY9pjGw,837
215
- monopyly/templates/credit/statement_reconciliation/statement_reconciliation_inquiry.html,sha256=a1fpLfQWSDjmwx_1k71lpH-QN8xAnZsW0VNc7ODrizs,895
216
- monopyly/templates/credit/statement_reconciliation/statement_reconciliation_page.html,sha256=B1mWqXvLIc9tPod-24HsVWVCsIKp6vBp71a5Mo322gA,2779
217
+ monopyly/templates/credit/statement_reconciliation/statement_reconciliation_inquiry.html,sha256=4c8kZXF6-A2Q5wVgr0rjLjfoEXTIl646QpoVJ99DfLw,785
218
+ monopyly/templates/credit/statement_reconciliation/statement_reconciliation_page.html,sha256=qGukmK6ObHjT2rZezFPzqLCmvLl0mlN1pDN33B_IJvc,2723
217
219
  monopyly/templates/credit/statement_reconciliation/summary.html,sha256=yDNREcWbCbvmVRSbMVst2YnyLoLrd-5sgG2bWzsNAF4,1804
218
220
  monopyly/templates/credit/statement_reconciliation/unrecorded_activities.html,sha256=wCgqgaih413A9RkyARGIQ9OMqaA2POkL57P-wkfG47k,836
219
- monopyly/templates/credit/tag_tree/subtag_tree.html,sha256=wMt4BbLIxkioQiWmdIcEVD1xz21uuXtSB08VxJUPB2I,580
220
- monopyly/templates/credit/tag_tree/tag_tree.html,sha256=cAsYpZWfguZWivALn4hE8fRVD6YsSvmIzRg2g5RSJTg,345
221
221
  monopyly/templates/credit/transaction_form/transaction_form.html,sha256=_2tYKMqmLE1Yqu9Pk94nOYuCxt3ZXGW8wDboMNn2iGQ,1662
222
222
  monopyly/templates/credit/transaction_form/transaction_form_page.html,sha256=x_gwHkqWVuiVIm2Ol_Cv7ce2EODJS1Ktn5S2kI4gG1o,795
223
223
  monopyly/templates/credit/transaction_form/transaction_form_page_new.html,sha256=zIKYO4NyuzxFQltbyJg2FnfOinMHessSdaMpuBTbNxI,312
224
224
  monopyly/templates/credit/transaction_form/transaction_form_page_update.html,sha256=VDlNFZPvuwNOfD53iPkpoi4WOyZYRHeIVy_7gpTJuew,513
225
- monopyly/templates/credit/transactions_table/condensed_row_content.html,sha256=TC2CNP30qwPYdn2Urv7B1hm1-oTSd9bpVWLRpEppJwM,639
226
- monopyly/templates/credit/transactions_table/expanded_row_content.html,sha256=SwS-YVDQDv0rHK2g_vLs0RWePKKo5972UEOG1JwuSVI,2061
225
+ monopyly/templates/credit/transactions_table/condensed_row_content.html,sha256=BuYxFOdVn5Xil73xYfpLobl5-LDdIckCkCobrkMzNUs,648
226
+ monopyly/templates/credit/transactions_table/expanded_row_content.html,sha256=UiGNqoOpz5lnkrsb1PIuoyZtjqpVTOoUvqyRrBjk2r8,2086
227
+ monopyly/templates/credit/transactions_table/table.html,sha256=S2xjvUyWnsKDIux2kt_sV2DRzKov-TfPuACBYrh9HDw,224
227
228
  monopyly/templates/credit/transactions_table/transaction_field_titles.html,sha256=km-3YEDJaygwcKV-rwYnrE7xF8u4Z7jCBsk0Ia-LO-M,758
228
- monopyly/templates/credit/transactions_table/transactions.html,sha256=tcppv0qNV-Qq6U5jfxoNyGKPXmyV9h9nR6rw4jXfBsY,481
229
- monopyly-1.5.1.dist-info/METADATA,sha256=eeifCD3BKPYr57ZJG3czCwzKzWpryfk3Q8_1swYqZAc,10980
230
- monopyly-1.5.1.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
231
- monopyly-1.5.1.dist-info/entry_points.txt,sha256=_GmCja7NEqYHlGlVbz4rThqk0SIOmFUkiE8mN1dwgdY,58
232
- monopyly-1.5.1.dist-info/licenses/COPYING,sha256=5X8cMguM-HmKfS_4Om-eBqM6A1hfbgZf6pfx2G24QFI,35150
233
- monopyly-1.5.1.dist-info/licenses/LICENSE,sha256=94rIicMccmTPhqXiRLV9JsU8P2ocMuEUUtUpp6LPKiE,253
234
- monopyly-1.5.1.dist-info/RECORD,,
229
+ monopyly/templates/credit/transactions_table/transactions.html,sha256=83zHx5Oa1KH1bMrKk2mlBmMiYKwa1t5lBq_JSAgslgc,390
230
+ monopyly-1.6.0.dist-info/METADATA,sha256=D-djrYM_GkLv7FwHsS88jpEsxv2rwU0o-nGtZFRnFVg,10968
231
+ monopyly-1.6.0.dist-info/WHEEL,sha256=qtCwoSJWgHk21S1Kb4ihdzI2rlJ1ZKaIurTj_ngOhyQ,87
232
+ monopyly-1.6.0.dist-info/entry_points.txt,sha256=VMqyRA0VRpTc0-5Z-VB-wX1AuyezoKKPhcf4bIUKz9g,110
233
+ monopyly-1.6.0.dist-info/licenses/COPYING,sha256=5X8cMguM-HmKfS_4Om-eBqM6A1hfbgZf6pfx2G24QFI,35150
234
+ monopyly-1.6.0.dist-info/licenses/LICENSE,sha256=94rIicMccmTPhqXiRLV9JsU8P2ocMuEUUtUpp6LPKiE,253
235
+ monopyly-1.6.0.dist-info/RECORD,,
@@ -0,0 +1,3 @@
1
+ [console_scripts]
2
+ monopyly = monopyly:main
3
+ monopyly-screenshot = monopyly.scripts.screenshot_application:main
monopyly/cli/apps.py DELETED
@@ -1,108 +0,0 @@
1
- """Application objects for running the app via the CLI."""
2
-
3
- import multiprocessing
4
- import subprocess
5
-
6
- from gunicorn.app.base import BaseApplication
7
-
8
- from .. import create_app
9
-
10
-
11
- class LocalApplication:
12
- """
13
- An object for running the application locally.
14
-
15
- This application object will run the Flask application using the
16
- built-in Python server on localhost, just like the Flask development
17
- mode. However, it will launch from port 5001 to avoid conflicting
18
- with other Python servers that may attempt to run on the default
19
- port 5000.
20
- """
21
-
22
- mode_name = "local"
23
- default_port = "5001"
24
- _debug = None
25
-
26
- def __init__(self, host=None, port=None, **options):
27
- """Initialize the application in development mode."""
28
- self._host = host
29
- self._port = port or self.default_port
30
- if options:
31
- raise NotImplementedError(
32
- f"Options besides `host` and `port` are not handled in {self.mode_name} mode."
33
- )
34
- self.application = create_app(debug=self._debug)
35
-
36
- def run(self):
37
- """Run the Monopyly application in development mode."""
38
- self.application.run(
39
- host=self._host,
40
- port=self._port,
41
- debug=self._debug,
42
- )
43
-
44
-
45
- class DevelopmentApplication(LocalApplication):
46
- """
47
- An object for running the application in development mode.
48
-
49
- This application object will run the Flask application using the
50
- built-in Python server on localhost, just like the Flask development
51
- mode.
52
- """
53
-
54
- mode_name = "development"
55
- default_port = None # traditionally 5000
56
- _debug = True
57
-
58
-
59
- class ProductionApplication(BaseApplication):
60
- """
61
- An object for running the application in production mode (via Gunicorn).
62
-
63
- This application object will run the Flask application using a
64
- Gunicorn server instead of the built-in Python server.
65
- """
66
-
67
- default_port = None # traditionally 8000
68
- _default_worker_count = (multiprocessing.cpu_count() * 2) + 1
69
-
70
- def __init__(self, host=None, port=None, **options):
71
- """Initialize the application in production mode."""
72
- if port and not host:
73
- raise ValueError("A host must be specified when the port is given.")
74
- self._host = host
75
- self._port = port or self.default_port
76
- self.options = options
77
- self.options["bind"] = self._determine_binding(options.get("bind"))
78
- self.options.setdefault("workers", self._default_worker_count)
79
- self.application = create_app()
80
- super().__init__()
81
-
82
- def _determine_binding(self, bind_option):
83
- # Parse any socket binding options
84
- if self._host and bind_option:
85
- raise ValueError(
86
- "The `host` may not be specified directly if the `bind` option is used."
87
- )
88
- if self._host:
89
- bind_values = [self._host]
90
- if self._port:
91
- bind_values.append(self._port)
92
- bind_option = ":".join(bind_values)
93
- return bind_option
94
-
95
- def load_config(self):
96
- config = {
97
- key: value
98
- for key, value in self.options.items()
99
- if key in self.cfg.settings and value is not None
100
- }
101
- for key, value in config.items():
102
- self.cfg.set(key.lower(), value)
103
-
104
- def load(self):
105
- return self.application
106
-
107
- def run(self, *args, **kwargs):
108
- return super().run(*args, **kwargs)