monopyly 1.4.5__py3-none-any.whl → 1.4.7__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 (50) hide show
  1. monopyly/CHANGELOG.md +187 -0
  2. monopyly/README.md +13 -2
  3. monopyly/__init__.py +19 -0
  4. monopyly/_version.py +2 -2
  5. monopyly/banking/accounts.py +1 -1
  6. monopyly/cli/apps.py +25 -4
  7. monopyly/common/forms/_forms.py +14 -11
  8. monopyly/core/actions.py +108 -21
  9. monopyly/core/blueprint.py +1 -1
  10. monopyly/core/context_processors.py +10 -0
  11. monopyly/core/errors.py +9 -0
  12. monopyly/core/filters.py +4 -2
  13. monopyly/core/routes.py +22 -9
  14. monopyly/credit/actions.py +29 -2
  15. monopyly/credit/routes.py +11 -6
  16. monopyly/credit/statements.py +21 -1
  17. monopyly/credit/transactions/_transactions.py +1 -1
  18. monopyly/static/css/style.css +161 -69
  19. monopyly/static/js/make-payment.js +4 -2
  20. monopyly/templates/auth/login.html +1 -1
  21. monopyly/templates/auth/register.html +1 -1
  22. monopyly/templates/banking/account_summaries.html +26 -12
  23. monopyly/templates/banking/account_summaries_page.html +2 -1
  24. monopyly/templates/banking/account_summary.html +7 -2
  25. monopyly/templates/banking/accounts_page.html +2 -2
  26. monopyly/templates/banking/transaction_form/transaction_form.html +1 -1
  27. monopyly/templates/core/credits.html +32 -0
  28. monopyly/templates/core/errors/400.html +8 -0
  29. monopyly/templates/core/errors/401.html +8 -0
  30. monopyly/templates/core/errors/403.html +8 -0
  31. monopyly/templates/core/errors/404.html +8 -0
  32. monopyly/templates/core/errors/405.html +8 -0
  33. monopyly/templates/core/errors/408.html +8 -0
  34. monopyly/templates/core/errors/418.html +8 -0
  35. monopyly/templates/core/errors/425.html +8 -0
  36. monopyly/templates/core/errors/500.html +8 -0
  37. monopyly/templates/core/errors/error.html +31 -0
  38. monopyly/templates/{profile.html → core/profile.html} +3 -1
  39. monopyly/templates/credit/card_graphic/card_back.html +1 -1
  40. monopyly/templates/credit/statement_summary.html +9 -4
  41. monopyly/templates/credit/statements.html +7 -6
  42. {monopyly-1.4.5.dist-info → monopyly-1.4.7.dist-info}/METADATA +16 -5
  43. {monopyly-1.4.5.dist-info → monopyly-1.4.7.dist-info}/RECORD +49 -37
  44. monopyly/templates/credits.html +0 -20
  45. /monopyly/templates/{index.html → core/index.html} +0 -0
  46. /monopyly/templates/{story.html → core/story.html} +0 -0
  47. {monopyly-1.4.5.dist-info → monopyly-1.4.7.dist-info}/WHEEL +0 -0
  48. {monopyly-1.4.5.dist-info → monopyly-1.4.7.dist-info}/entry_points.txt +0 -0
  49. {monopyly-1.4.5.dist-info → monopyly-1.4.7.dist-info}/licenses/COPYING +0 -0
  50. {monopyly-1.4.5.dist-info → monopyly-1.4.7.dist-info}/licenses/LICENSE +0 -0
@@ -10,6 +10,6 @@
10
10
  <input name="username" id="username" required>
11
11
  <label for="password">Password</label>
12
12
  <input type="password" name="password" id="password" required>
13
- <input class="button" type="submit" value="Log In">
13
+ <input class="button" type="submit" value="Log In" />
14
14
  </form>
15
15
  {% endblock %}
@@ -10,6 +10,6 @@
10
10
  <input name="username" id="username" required>
11
11
  <label for="password">Password</label>
12
12
  <input type="password" name="password" id="password" required>
13
- <input class="button" type="submit" value="Register">
13
+ <input class="button" type="submit" value="Register" />
14
14
  </form>
15
15
  {% endblock %}
@@ -1,21 +1,35 @@
1
1
  <div id="bank-account-summaries">
2
2
 
3
- {% for account_type in type_accounts %}
4
- <div class="account-type-block grouping">
3
+ {% for account_type, accounts in type_accounts|items %}
4
+ {# Use a scoped variable so that the accounts generator can be reused #}
5
+ {% with accounts = accounts|list %}
5
6
 
6
- {% for account in type_accounts[account_type]|sort(attribute='last_four_digits') %}
7
+ <div class="account-type-stack group-stack">
7
8
 
8
- <a class="account-block button-block" href="{{ url_for('banking.load_account_details', account_id=account.id) }}">
9
- <div class="title">
10
- <span class="digits">{{ account.last_four_digits }}</span>
11
- <b>{{ account.account_type.type_name }}</b>
12
- </div>
13
- <div class="balance">${{ account.balance|currency }}</div>
14
- </a>
9
+ <h2 class="stack-title">
10
+ {{ account_type.type_name }}
11
+ {% if accounts|length> 1 %}
12
+ <span class="stack-title-info">${{ accounts|sum(attribute='balance')|currency }}</span>
13
+ {% endif %}
14
+ </h2>
15
15
 
16
- {% endfor %}
16
+ <div class="account-blocks">
17
+ {% for account in accounts|sort(attribute='last_four_digits') %}
17
18
 
18
- </div>
19
+ <a class="account-block button-block" href="{{ url_for('banking.load_account_details', account_id=account.id) }}">
20
+ <div class="title">
21
+ <span class="digits">{{ account.last_four_digits }}</span>
22
+ <b>{{ account.account_type.type_name }}</b>
23
+ </div>
24
+ <div class="balance">${{ account.balance|currency }}</div>
25
+ </a>
26
+
27
+ {% endfor %}
28
+ </div>
29
+
30
+ </div>
31
+
32
+ {% endwith %}
19
33
  {% endfor %}
20
34
 
21
35
  </div>
@@ -44,7 +44,8 @@
44
44
  {% block content %}
45
45
 
46
46
  <div id="bank-account-summaries-container">
47
- <h2 class="bank">{{ bank.bank_name }} (${{ bank_balance|currency }})</h2>
47
+ <h2 class="bank">{{ bank.bank_name }}</h2>
48
+ <h3 class="balance">${{ bank_balance|currency }}</h3>
48
49
 
49
50
  {% include 'banking/account_summaries.html' %}
50
51
 
@@ -9,8 +9,13 @@
9
9
  </div>
10
10
 
11
11
  <div class="balance">
12
- <div>$</div>
13
- <div>{{ account.balance|currency }}</div>
12
+ {% with account_balance = account.balance|currency %}
13
+ {% set vbox_width = calculate_summary_balance_width(account_balance) %}
14
+ <svg viewBox="0 0 {{ vbox_width }} 100">
15
+ <text x="0" y="75" fill="currentColor">$</text>
16
+ <text x="75" y="75" fill="currentColor">{{ account_balance }}</text>
17
+ </svg>
18
+ {% endwith %}
14
19
  </div>
15
20
 
16
21
  {% if account.balance != account.projected_balance %}
@@ -19,8 +19,8 @@
19
19
  {% set bank_accounts = bank.bank_accounts %}
20
20
  {% if bank_accounts %}
21
21
 
22
- <div class="bank-block grouping">
23
- <h3>{{ bank.bank_name }}</h3>
22
+ <div class="bank-stack group-stack">
23
+ <h2 class="stack-title">{{ bank.bank_name }}</h2>
24
24
 
25
25
  <div class="account-blocks box-table">
26
26
  {% for account in bank_accounts %}
@@ -1,4 +1,4 @@
1
- <form id="bank-transaction" class="transaction" action="{{ submission_url }}" method="POST" autocomplete="off">
1
+ <form id="bank-transaction" class="transaction" action="{{ submission_url }}" method="post" autocomplete="off">
2
2
 
3
3
  {{ form.hidden_tag() }}
4
4
 
@@ -0,0 +1,32 @@
1
+ {% extends "layout.html" %}
2
+
3
+ {% block title %}
4
+ Credits
5
+ {% endblock %}
6
+
7
+ {% block header %}
8
+ <h1>Credits</h1>
9
+ {% endblock %}
10
+
11
+ {% block content %}
12
+
13
+ <div class="credits">
14
+
15
+ <h3>Image Credits</h3>
16
+ <p>
17
+ The chain link icon was adapted from <a href="https://commons.wikimedia.org/wiki/File:Chain_link_icon.png">Wikipedia Commons</a>.
18
+ The original image was created by user Mdowdell and published under the <a href="https://creativecommons.org/licenses/by-sa/3.0/legalcode">CC BY-SA 3.0 License</a>.
19
+ </p>
20
+
21
+ </div>
22
+
23
+ <div class="affiliation-disclaimer">
24
+
25
+ <h3>Disclaimer</h3>
26
+ <p>
27
+ At risk of stating the obvious, given that this is a <b>homemade personal finance manager</b>, the <i>Monopyly</i> app is in no way affiliated, associated, authorized, endorsed by, or in any way officially connected with Hasbro, the present publisher and trademark holder of the board game MONOPOLY.
28
+ </p>
29
+
30
+ </div>
31
+
32
+ {% endblock %}
@@ -0,0 +1,8 @@
1
+ {% extends "core/errors/error.html" %}
2
+
3
+
4
+ {% block custom_error_content %}
5
+
6
+ <p>Nice try, but something went wrong in that request.</p>
7
+
8
+ {% endblock %}
@@ -0,0 +1,8 @@
1
+ {% extends "core/errors/error.html" %}
2
+
3
+
4
+ {% block custom_error_content %}
5
+
6
+ <p>No cheating! You need to be authenticated to do that.</p>
7
+
8
+ {% endblock %}
@@ -0,0 +1,8 @@
1
+ {% extends "core/errors/error.html" %}
2
+
3
+
4
+ {% block custom_error_content %}
5
+
6
+ <p>No cheating! Looks like you don't have access to that.</p>
7
+
8
+ {% endblock %}
@@ -0,0 +1,8 @@
1
+ {% extends "core/errors/error.html" %}
2
+
3
+
4
+ {% block custom_error_content %}
5
+
6
+ <p>That page doesn't seem to exist. Maybe you need to read the instructions and try again?</p>
7
+
8
+ {% endblock %}
@@ -0,0 +1,8 @@
1
+ {% extends "core/errors/error.html" %}
2
+
3
+
4
+ {% block custom_error_content %}
5
+
6
+ <p>No cheating! You're request used a method that's not allowed.</p>
7
+
8
+ {% endblock %}
@@ -0,0 +1,8 @@
1
+ {% extends "core/errors/error.html" %}
2
+
3
+
4
+ {% block custom_error_content %}
5
+
6
+ <p>Slow players are holding up the game, so this request timed out.</p>
7
+
8
+ {% endblock %}
@@ -0,0 +1,8 @@
1
+ {% extends "core/errors/error.html" %}
2
+
3
+
4
+ {% block custom_error_content %}
5
+
6
+ <p>...short and stout! I also have no idea how you got this error message.</p>
7
+
8
+ {% endblock %}
@@ -0,0 +1,8 @@
1
+ {% extends "core/errors/error.html" %}
2
+
3
+
4
+ {% block custom_error_content %}
5
+
6
+ <p>Not your turn! Wait a bit and try again.</p>
7
+
8
+ {% endblock %}
@@ -0,0 +1,8 @@
1
+ {% extends "core/errors/error.html" %}
2
+
3
+
4
+ {% block custom_error_content %}
5
+
6
+ <p>Someone (not saying who) messed up. Sorry about that.</p>
7
+
8
+ {% endblock %}
@@ -0,0 +1,31 @@
1
+ {% extends "layout.html" %}
2
+
3
+ {% block title %}
4
+ {{ exception.name }} ({{ exception.code }})
5
+ {% endblock %}
6
+
7
+ {% block header %}
8
+
9
+ <h1 class="error">
10
+ No dice!
11
+ <span class="code">
12
+ {{ exception.code }} Error: {{ exception.name }}
13
+ </span>
14
+ </h1>
15
+
16
+ {% endblock %}
17
+
18
+
19
+ {% block content %}
20
+
21
+ <div class="custom-error-content">
22
+ {% block custom_error_content %}
23
+ {% endblock %}
24
+
25
+ </div>
26
+
27
+ <div class="standard-error-content">
28
+ <p class="error-description">{{ exception.description }}</p>
29
+ </div>
30
+
31
+ {% endblock %}
@@ -25,7 +25,9 @@
25
25
  <div class=user-settings">
26
26
 
27
27
  <div class="password">
28
- <a style="color: gray;" href="">Change password (coming soon)</a>
28
+ <a style="color: gray;" href="{{ url_for('core.change_password') }}">
29
+ Change password (coming soon)
30
+ </a>
29
31
  </div>
30
32
 
31
33
  </div>
@@ -10,7 +10,7 @@
10
10
  <div class="options">
11
11
 
12
12
  <label class="toggle-switch-gadget" for="card-{{ card.id }}-status">
13
- <input id="card-{{ card.id }}-status" data-card-id="{{ card.id }}" type="checkbox" {{ 'checked' if card.active else '' }}/>
13
+ <input id="card-{{ card.id }}-status" data-card-id="{{ card.id }}" type="checkbox"{{ ' checked' if card.active else '' }} />
14
14
 
15
15
  <div class="option">
16
16
  <div class="text">
@@ -9,8 +9,13 @@
9
9
  </div>
10
10
 
11
11
  <div class="balance">
12
- <div>$</div>
13
- <div>{{ statement.balance|currency }}</div>
12
+ {% with statement_balance = statement.balance|currency %}
13
+ {% set vbox_width = calculate_summary_balance_width(statement_balance) %}
14
+ <svg viewBox="0 0 {{ vbox_width }} 100">
15
+ <text x="0" y="75" fill="currentColor">$</text>
16
+ <text x="75" y="75" fill="currentColor">{{ statement_balance }}</text>
17
+ </svg>
18
+ {% endwith %}
14
19
  </div>
15
20
 
16
21
  <div id="payment">
@@ -47,8 +52,8 @@
47
52
 
48
53
  <div class="form-line">
49
54
  <div class="dollar-sign">$</div>
50
- <input id="pay-amount" type="text" name="pay_amount" value="{{ statement.balance|currency }}" maxlength="8"/>
51
- <input id="pay-date" type="text" name="pay_date" value="{{ date_today }}" maxlength="10"/>
55
+ <input id="pay-amount" type="text" name="pay_amount" value="{{ statement.balance|currency }}" maxlength="8" />
56
+ <input id="pay-date" type="text" name="pay_date" value="{{ date_today }}" maxlength="10" />
52
57
  </div>
53
58
 
54
59
  <div class="form-line">
@@ -1,15 +1,16 @@
1
1
  <div id="credit-statements">
2
2
 
3
- {% for card in card_statements %}
3
+ {% for card, statements in card_statements|items %}
4
4
 
5
- <div class="card-column grouping">
5
+ <div class="card-stack group-stack">
6
6
 
7
- <div>
8
- <b>{{ card.account.bank.bank_name }}</b> <span class="digits">{{ card.last_four_digits }}</span>
9
- </div>
7
+ <h2 class="stack-title">
8
+ {{ card.account.bank.bank_name }}
9
+ <span class="stack-title-info">{{ card.last_four_digits }}</span>
10
+ </h2>
10
11
 
11
12
  <div class="statement-blocks">
12
- {% for statement in card_statements[card] %}
13
+ {% for statement in statements %}
13
14
  {% if statement.balance is not none %}
14
15
 
15
16
  <a class="statement-block button-block" href="{{ url_for('credit.load_statement_details', statement_id=statement.id) }}">
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: monopyly
3
- Version: 1.4.5
3
+ Version: 1.4.7
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
@@ -25,9 +25,9 @@ Classifier: Topic :: Office/Business :: Financial :: Spreadsheet
25
25
  Requires-Python: <3.11,>=3.10
26
26
  Requires-Dist: authanor==1.1.0
27
27
  Requires-Dist: flask-wtf==1.2.1
28
- Requires-Dist: flask==3.0.2
28
+ Requires-Dist: flask==3.0.3
29
29
  Requires-Dist: fuisce==1.0.2
30
- Requires-Dist: gunicorn==21.2.0
30
+ Requires-Dist: gunicorn==22.0.0
31
31
  Requires-Dist: markdown==3.6
32
32
  Requires-Dist: python-dateutil==2.9.0
33
33
  Requires-Dist: rich==13.7.1
@@ -63,12 +63,23 @@ The package requires a recent version of Python (3.9+).
63
63
 
64
64
  ## Getting started
65
65
 
66
- Once the package is properly installed, run the app 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, 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):
67
67
 
68
68
  ```
69
- $ monopyly development --browser [--host HOST] [--port PORT]
69
+ $ monopyly local --browser [--host HOST] [--port PORT]
70
70
  ```
71
71
 
72
+ Local mode indicates that the app is just going to be run using a locally hosted server, accessible to just your machine.
73
+ Other available modes are `development` and `production`, for those looking to either develop the application or host the application on a server.
74
+
75
+ <div class="warning">
76
+ <h5>Use your brain when choosing a mode!</h5>
77
+ <small>
78
+ If you intend to be the only user of the app, served just from your PC, local mode is fine; you will be served well-enough by the built-in Python server, and you do not need to configure secret keys for the application.
79
+ If you plan to host the application, however, <b>DO NOT</b> use local mode (or development mode) and run the app in production mode instead.
80
+ </small>
81
+ </div>
82
+
72
83
  By using the `--browser` option in development mode, this will open to an empty homepage with a welcome message.
73
84
 
74
85
  <img class="screenshot" src="https://raw.githubusercontent.com/mitchnegus/monopyly/main/monopyly/static/img/about/homepage.png" alt="user homepage" width="800px">
@@ -1,11 +1,12 @@
1
- monopyly/README.md,sha256=T-Avdpr3whgP6g0P_w-u02CSwzBH2yRnleRrM1sKrj4,8281
2
- monopyly/__init__.py,sha256=YxMJAI5ig4-jlFyBGy4gOC_H5cp8a4L2sGmoX5bRYjU,1763
3
- monopyly/_version.py,sha256=Q6unsBbzWHPRNufBzIDL-pvFPHC27FQ8CYCDAcnbQoY,160
1
+ monopyly/CHANGELOG.md,sha256=ulbbaPAcVSV7oNWm3yswxZJFCESWwG2zk2jamVJxAFQ,7137
2
+ monopyly/README.md,sha256=f7pDaNKl5hvycxVWWuZOeO6SDP-qI4BafgvyZwPPoVE,9027
3
+ monopyly/__init__.py,sha256=5ImOjkZGxUBhqG4EK5YWebwTO4V8G2fa_lZAGCD5SgY,2207
4
+ monopyly/_version.py,sha256=nmlXCBuHHFy5JdYfw3oylepRJ5P5EEImr1ItrcZvJdo,160
4
5
  monopyly/auth/actions.py,sha256=T99eAP8dxFZMzLu2LxZFIXGYIroP8I7KJ-WJ8GJ1gws,260
5
6
  monopyly/auth/blueprint.py,sha256=sFbmTvSBhjv1pn2gJLH5J6zanPLuemmWbgEj5ZKCiTY,244
6
7
  monopyly/auth/routes.py,sha256=mODJHrdFhffusfbYwQ_wpIY7eAE7Gh7irosIef4Mluc,2902
7
8
  monopyly/auth/tools.py,sha256=hifCHBN06Ht-FnMhJPzzj-xjMN8uwbeJ-azRVjnT99c,801
8
- monopyly/banking/accounts.py,sha256=BYGqDISd5FszktDa1NW494ipcNgqI1Y03Gn07kBeiWE,9828
9
+ monopyly/banking/accounts.py,sha256=yYlXvyhLBQoBZYr_WMk6_3nxlhwU4NEkCYKv5hHFjcM,9828
9
10
  monopyly/banking/actions.py,sha256=am8AlVWJGhrTvWNiAQPba-2guxdESmhzl6mIJhjAmlg,1565
10
11
  monopyly/banking/banks.py,sha256=X1seKJrec-o8z-bM0wVTR42vMx1q5A9Lf2jNUtINlrQ,1745
11
12
  monopyly/banking/blueprint.py,sha256=PDsqe4DmiT7cDYW9IxxTfizu9Lqol1Lhp7ajMK6fUuI,255
@@ -13,40 +14,41 @@ monopyly/banking/filters.py,sha256=wCsAUh592B5BmGFC9NqmrJZ0NdQZi21hvy0QsKqhgLg,6
13
14
  monopyly/banking/forms.py,sha256=p-YGZgdKugk3VKILLiQNEH5KQmXop5G8P1Bs4sUqbK0,10506
14
15
  monopyly/banking/routes.py,sha256=BAV6PBQf20dSTxqY88Zh0FGAzpj7TxgZaHPxGCJneJ4,8149
15
16
  monopyly/banking/transactions.py,sha256=2_wFXl4ZrHzLoFGz72ksYA2_8UvB0N1wtBFd8kTwTyQ,8454
16
- monopyly/cli/apps.py,sha256=ufyKali-sLsUONuERoMTvSjbFzageShtG62JO0p9fIo,2689
17
+ monopyly/cli/apps.py,sha256=TY97lShiJmsKAnVXVbBLJDXW2TmiyNwrPic8w9roPCQ,3356
17
18
  monopyly/cli/run.py,sha256=8NHv5TW5Ze6pyhxZCOjmba-EU4Nu6sObYfNJbDPtrds,3838
18
19
  monopyly/common/transactions.py,sha256=2-EkctGC9k5W5kodXdYJIBXu5l5JNI9dxfgbp2Nxccg,12185
19
20
  monopyly/common/utils.py,sha256=BjXhfNXGWkAPt-ebldvmZ2z00P8MhKJzjxrJJ6mzRQY,5867
20
21
  monopyly/common/forms/__init__.py,sha256=6iFTlcoaQmCbrjS1KfFhWXQUfyqnA-vKPMVxLyJMlXY,120
21
- monopyly/common/forms/_forms.py,sha256=IlN1CMBNNFicvGzH82YYqd4SZodoRm-rlc7VwNgmHro,7814
22
+ monopyly/common/forms/_forms.py,sha256=Y2NrfPOdZaSyjo_ZPG8aK2KHhKg8wnWLSvrhSj1IoSQ,7885
22
23
  monopyly/common/forms/fields.py,sha256=XgvkfszpUAZyIs-osHGFADmzuo0Ni_e78NXtG-grBdI,4082
23
24
  monopyly/common/forms/utils.py,sha256=awZOtWaohzSW_SZrXhUpJBY1AXPnKBFTG2cqim22Db0,5676
24
25
  monopyly/common/forms/validators.py,sha256=C5_NN8ktvBw6MrSXwv_x9_SQohCNmnp4brNQFELHBlI,1205
25
26
  monopyly/config/__init__.py,sha256=pW2lHNhsdM2gRjLAWumnLUHZMAOEdprX4aXaONwo6AY,73
26
27
  monopyly/config/default_settings.py,sha256=jtWz4ElasnAbfBCiRfbsYyy--L6N6jTOGRh3PNWnVj4,1829
27
28
  monopyly/config/settings.py,sha256=YEctSb8mRDvuMA1tTs1N7862Z2bMY7DPf0xo4Ist2pg,1984
28
- monopyly/core/actions.py,sha256=M886J8DrxMfpessVPwigbkkUfUo7au1mj1La-BfFTkw,1220
29
- monopyly/core/blueprint.py,sha256=Kbl4M2Sdr4Sf2l9RPxCVFP6R_cBzYzdbIEG5ozUKGIc,252
30
- monopyly/core/context_processors.py,sha256=NZktwVLUUvE-Zv25ZqTAjIWGWx74Bda4LeZPcDTflsE,821
31
- monopyly/core/filters.py,sha256=9EQCHqLD3LEuyVkAE6_XCVjU1BezgAUsSWAS4PAzIb4,1253
29
+ monopyly/core/actions.py,sha256=jkrR5bBN1RG1S4Gtumnk51TkCNf4gfsUZkTi8LKHVHA,4172
30
+ monopyly/core/blueprint.py,sha256=pZyK8ly0UR1BbHx4xwYk1UzakzkVCS8wiMSM8XdCG2U,260
31
+ monopyly/core/context_processors.py,sha256=ByQGQpOJIpxG3WM3Kv34LbBY0H8HVeR81TDYkdOwJgs,1166
32
+ monopyly/core/errors.py,sha256=xF4gA3Hv99op3EMV_f2CskHWVLrV-9ckaHKJMWR2h7o,200
33
+ monopyly/core/filters.py,sha256=uBkNjQyqW-9RkiQG23vngnI1MZXFeh4Rhe5MQqklAEQ,1284
32
34
  monopyly/core/internal_transactions.py,sha256=PImeViMU9rdDDPLXld1xC6bdAoulzRDr0zci4pUQY8I,459
33
- monopyly/core/routes.py,sha256=BSeqMFu5XSm2MuMBDHwPAaOiLeMjO3KsFYm5RySzS8c,2427
35
+ monopyly/core/routes.py,sha256=ADF7LB3hhvwPwIqc5l46sliziM7ZgGXh5vFwKzxlkGA,2747
34
36
  monopyly/credit/accounts.py,sha256=otQmuTDJZYX868EZl80n89XlzfiwlnBkfSXZa65rSqI,1898
35
- monopyly/credit/actions.py,sha256=ilYdpNjzzbZSYx3pTkBTcfqA_vS8g74ee0l4_EgLpZ8,5334
37
+ monopyly/credit/actions.py,sha256=E80ocYxWKsNO1ynU3KQjVZkTwAGo4Fv7mYPmA68T9ng,6310
36
38
  monopyly/credit/blueprint.py,sha256=XbrMhtyCp2732uWPB2kjn_W8P8pH8RVTwo9P8Pt--Is,251
37
39
  monopyly/credit/cards.py,sha256=9Ug51aY2-G8SzooLC-FemRNeTBLd9JOpXHFW74EcdLU,5614
38
40
  monopyly/credit/forms.py,sha256=-Oj7NxmDKNY39McbtqSC-v_Tppec0BfDZmeUnbnugCo,12250
39
- monopyly/credit/routes.py,sha256=H31HfAcl9MBCwf-gHGpdfeAmWoijsC2XSgcMpvWyN0c,17880
40
- monopyly/credit/statements.py,sha256=IMwggNvo9XS9-khwvIMH6A-ChM9KIqtCA0XhzX5KtIk,6520
41
+ monopyly/credit/routes.py,sha256=zw3if37eHibdh4VwbgpxHUPt_UrF-n8fAxZe3Tn1WWI,18127
42
+ monopyly/credit/statements.py,sha256=lRcAgcr9kPnh5GCE6McWfOdY8uCgmg2j2bikSioR3HI,7219
41
43
  monopyly/credit/transactions/__init__.py,sha256=1Exn6T--HtwNCHzS_hDJ0ba7qCB7w_8C-yY3KSxvFKg,165
42
- monopyly/credit/transactions/_transactions.py,sha256=LqbZV1Q2bb_B6tATmBihCPm8YhcbABRUCCYhNRg9qtk,8771
44
+ monopyly/credit/transactions/_transactions.py,sha256=Ciw5ORScBwhhUBVFsGNOR4uy-X_KF3tVsyfKRVQHMOE,8771
43
45
  monopyly/database/__init__.py,sha256=tlZsXmzH8hB5m_RASbKTjPRqLel-xbymqrzo0TPoFCk,3402
44
46
  monopyly/database/models.py,sha256=TqIwIe4tVv3TS0azz8Bm9nL1qT2RAyq292myPW0XH1A,15095
45
47
  monopyly/database/preloads.sql,sha256=KBS_WYRofFdOVN-IgHzZhfyJrY6ZOwHeExN-fQr3htU,363
46
48
  monopyly/database/schema.sql,sha256=cdl9b5CnYrnQ-lck147GtwArx_JJbX1vF9YYLivTeyw,4660
47
49
  monopyly/database/views.sql,sha256=UTO2QRkVTfQ12bMVkR-O6Qv80DvYo8hngPHn2A1_1F8,3853
48
50
  monopyly/static/jquery-3.7.0.min.js,sha256=2Pmvv0kuTBOenSvLm6bvfBSSHrUJ-3A7x6P5Ebd07_g,87462
49
- monopyly/static/css/style.css,sha256=TKU9Uzj7iEBNcTARinZ1fsTI4Y-qePHQAZdBKspSjkk,48860
51
+ monopyly/static/css/style.css,sha256=czs8-2XXHEWUNfO5MQ-AdvpfHHZzq6P7jR0BRnknZ1E,50618
50
52
  monopyly/static/favicon/browserconfig.xml,sha256=Zt_AVOxiritWWXoUwPsHpx4vu4kM_butdFVzoYCYbM8,315
51
53
  monopyly/static/favicon/favicon-114.png,sha256=kjElVFiix-kFCMdADkLpJsi8kL3GDsFm85oJhyCH-C0,20601
52
54
  monopyly/static/favicon/favicon-120.png,sha256=g4uzHMdW0MlJhcgWfrOsj2MB2D-HdLa4t60_hvyICkM,22077
@@ -119,7 +121,7 @@ monopyly/static/js/flip-card.js,sha256=4a65JFO7kf4qzZ-8wvWiiO_BwZpiWO2cHHzZugXRo
119
121
  monopyly/static/js/hide-homepage-block.js,sha256=Yw3m5sc5dO6pDh2VUzJu1re4NXZcuSLSMs6Acou_rHo,495
120
122
  monopyly/static/js/infer-card.js,sha256=WIDXWhfF4gXdlRCo2OA0IpSsszxDTkV7ZSb6Qo7pheA,1790
121
123
  monopyly/static/js/infer-statement.js,sha256=ufcYJ2z6halVXpiZHviI_4JN48jOBAM4NbSDtWH9BoU,1896
122
- monopyly/static/js/make-payment.js,sha256=4Ins1Mk06rRG6yjtPfRdUZNTRCUD-Yc7l3QPS2qhT_8,3139
124
+ monopyly/static/js/make-payment.js,sha256=fvCSHrsUuRFJ299icIklEch8SQLnYL2cfcTwkW4fzw4,3276
123
125
  monopyly/static/js/show-linked-transaction.js,sha256=AM7d2PISUMbS2UcSNZQuW8n24pcDG0hD8BjFjAyWUOk,1085
124
126
  monopyly/static/js/update-account-statement-parameters.js,sha256=1mjC-9yIwbm-xYz9AKkxfKWv70UftqyieJrMkSMb1qU,1072
125
127
  monopyly/static/js/update-bank-name.js,sha256=4nEkCTEK32y9v7WAgjQymKFxM_HTFRwdfGkmEwtdWoE,925
@@ -136,22 +138,18 @@ monopyly/static/js/modules/manage-overlays.js,sha256=gCE1qTT_0RG6a5OX9PrFOc-KLmq
136
138
  monopyly/static/js/modules/manage-subforms.js,sha256=-yKA7l8ZI0294auTI307LrKkw_Bl6I8suwK4VLuLhMc,2197
137
139
  monopyly/static/js/modules/update-database-widget.js,sha256=S67hmqaGwzbPy94IjYrag0ZPOur4r5y_tb3_5t7xuYI,1581
138
140
  monopyly/static/js/modules/update-display-ajax.js,sha256=MJBiRMmeIHRG7lLbqIcXkUecKNNMFFVJXwhs_N8LKl0,878
139
- monopyly/templates/credits.html,sha256=U2lOe7XrW1Rt9DCvo7pRxHDzRzBnYxHjX3cS5z36NI8,506
140
- monopyly/templates/index.html,sha256=caoQuizzJibU90nivf1-Esnptg5wzFWyhVJoAkEPKdE,4374
141
141
  monopyly/templates/layout.html,sha256=ETQ7fNC4H0JjZZTnamZoJKwXbsXEHW72ZhahOER3NkQ,4741
142
- monopyly/templates/profile.html,sha256=qFU1lu5lbzC6p36OCcZGgRHcygmSqPpXDTLxaRDnLXU,2291
143
- monopyly/templates/story.html,sha256=fUvIE8t5oG_Mw443Oeu4vWKospFQv8dSfBOCisn5L0g,3207
144
- monopyly/templates/auth/login.html,sha256=CBEIxnDVrZ8dH3fgsYi5BVyesEUAvUGYQW7hW_gI8aE,441
145
- monopyly/templates/auth/register.html,sha256=eFSDl2vUiFil9VAB7uMuxNT872MSQugvVXCfXtVT5ac,445
142
+ monopyly/templates/auth/login.html,sha256=aZwaHBiKtQa_ZkVBqLUQIbwQdEAJNwcyYNjFQcRp-k0,443
143
+ monopyly/templates/auth/register.html,sha256=G6VxfYPIbXQco6Z_1PVQQ40vNWgG3PScmN20npx88yQ,447
146
144
  monopyly/templates/banking/account_page.html,sha256=pP7j6pRngqO8D_kQKbRINTQ61L5VJs66dsNPscO0czs,1946
147
- monopyly/templates/banking/account_summaries.html,sha256=h_grH5xF94Um8F2a8Ag1I9_bwstr7e6Lpx4Ak5ISeiQ,647
148
- monopyly/templates/banking/account_summaries_page.html,sha256=LuAAjd8U0LDxgJoBKAtVUw-b6KGni0Osre8O3gN17fY,1086
149
- monopyly/templates/banking/account_summary.html,sha256=45vsPptiN_ZLVFG54hib9alKJHArUWtIvgqS0foi2JE,655
150
- monopyly/templates/banking/accounts_page.html,sha256=JYI0cfaK6lxF-aDsYQLQkfEkx9xWdgAfW1xYbZRQmGs,2149
145
+ monopyly/templates/banking/account_summaries.html,sha256=IyokKcbv76a9_wDfX4MlSdwa2Xluav-TDc_MXnBOMv0,1125
146
+ monopyly/templates/banking/account_summaries_page.html,sha256=puBlB52WMZR_Dhz6_rSLomNa9QSChsItsshrKT5Aixs,1113
147
+ monopyly/templates/banking/account_summary.html,sha256=pE5DyrLP2MYewsECpP0iVusTlIunWe4tiLjSwGMV9uA,939
148
+ monopyly/templates/banking/accounts_page.html,sha256=iPv_s7rdEINBG1c_XwN7YgHjIDXnl64-JkPpKuIAeXc,2172
151
149
  monopyly/templates/banking/account_form/account_form.html,sha256=v8AH6DTBW-4XVffcmr-sRRBl1k0e-30Q7Vy5sXHkrPM,1226
152
150
  monopyly/templates/banking/account_form/account_form_page_new.html,sha256=aCahQlbJfIM_vzvHJb81dG_ORpXFmOw5QzYFNep7LxY,533
153
151
  monopyly/templates/banking/transaction_form/bank_info_form.html,sha256=RkEjEgbD5zw4QlvpJ6koA8TxE0ZRTGmfmCy8SC2RVd0,670
154
- monopyly/templates/banking/transaction_form/transaction_form.html,sha256=U2JtO7Ji7kgK9zeNfUm48nVSowjv0CxHjHTK45ZXiRw,1399
152
+ monopyly/templates/banking/transaction_form/transaction_form.html,sha256=M8Jqdl50GtVLuKxV1kLNuS3eMiaDo7rXQvwq3DpPv9Q,1399
155
153
  monopyly/templates/banking/transaction_form/transaction_form_page.html,sha256=q7pPXmqhpBXZ8jJKWENisqYXPpAZxVL1bYT0lIUUZA4,526
156
154
  monopyly/templates/banking/transaction_form/transaction_form_page_new.html,sha256=-PFAF3IcJXKRg2erlGFuvwD1XMx6JvndNWjdPJbmRtA,313
157
155
  monopyly/templates/banking/transaction_form/transaction_form_page_update.html,sha256=4PljOpO7wTNNEq-mhFzA-uHvUxzerfRMbDddWvSMzlo,350
@@ -171,13 +169,27 @@ monopyly/templates/common/transactions_table/subtransactions.html,sha256=6vf9M2j
171
169
  monopyly/templates/common/transactions_table/transaction_condensed.html,sha256=2MR4WPdkc28OACOqwCszFtXodxnIvfKIF_rh2OzJqh8,300
172
170
  monopyly/templates/common/transactions_table/transaction_expanded.html,sha256=xNn7hJs3ulQIroTbXGfxPSrlZCmqr2QhtEzqS3URmVg,1242
173
171
  monopyly/templates/common/transactions_table/transactions.html,sha256=pwJxOPZgU7m3juZd4rxhKvsZmvtjsdS-eLDgbSOllEQ,527
172
+ monopyly/templates/core/credits.html,sha256=uXkDl6XwsZAu1weONQQlf1WiBUZDiTHqsZLkvu6JAXU,948
173
+ monopyly/templates/core/index.html,sha256=caoQuizzJibU90nivf1-Esnptg5wzFWyhVJoAkEPKdE,4374
174
+ monopyly/templates/core/profile.html,sha256=88DgHlnSAZ9V4pAJmo_kPpRRY_1vhwcrYLxS5hZJDxM,2356
175
+ monopyly/templates/core/story.html,sha256=fUvIE8t5oG_Mw443Oeu4vWKospFQv8dSfBOCisn5L0g,3207
176
+ monopyly/templates/core/errors/400.html,sha256=whUYO3b6UIQWfN8y563umccU8GLxqXu0A5nb5uNM-XY,152
177
+ monopyly/templates/core/errors/401.html,sha256=3HH9TSDZfhyxZVcVnT0PNe524ADvEHIj6BsllQYFFOQ,154
178
+ monopyly/templates/core/errors/403.html,sha256=SSJsDIKFFKqap5RR4oM7IsvWY6dsgfZVPPKPSpB2d6A,155
179
+ monopyly/templates/core/errors/404.html,sha256=VStDPWwMJFet8pSTvi5KY5sbLiPjzMa1QJ4kkbRPn-Y,188
180
+ monopyly/templates/core/errors/405.html,sha256=dTthfzWekYzvbOfTUkAr0yCTK9Ufa194PIYpCZNc7kQ,162
181
+ monopyly/templates/core/errors/408.html,sha256=QlhJ7S5wiFJLCQMtrn4o3ScYHAEoHfby24OsK-D_d70,165
182
+ monopyly/templates/core/errors/418.html,sha256=zfs-NbLsfQpx_ZhS6O81LjXZgO0UKnxkuG6soFucbuw,172
183
+ monopyly/templates/core/errors/425.html,sha256=9U-tIDbS6BKCTqMzokCrXcmPlKn5OcFL8z5ffz19LWg,141
184
+ monopyly/templates/core/errors/500.html,sha256=kSrvsTb1ueDst7m10hYuWmbPJ_ep6aaL3ujhBPmVl-g,154
185
+ monopyly/templates/core/errors/error.html,sha256=QBATauzceuPQAW3wDjjhw_8PkrRLbM5DeG4hEf09vQk,534
174
186
  monopyly/templates/credit/account_page.html,sha256=HxQzRfEejFXjmZwtZD-EdHipQ7zOedKlpxwfAOMM49w,3618
175
187
  monopyly/templates/credit/card_submission_page.html,sha256=7OU6PB01jACSKSzXGySWL8ccwfCT00SeX2KkdwW3K4Q,345
176
188
  monopyly/templates/credit/cards.html,sha256=lvuKip2nHDmPi2Wj8zmO9ZXKXY22Dlv9fDrtHuYCSqA,598
177
189
  monopyly/templates/credit/cards_page.html,sha256=HTrTQwF-Y5Z9oWqt72i6HbAaRhQibTEt3TJKavm6_2M,250
178
190
  monopyly/templates/credit/statement_page.html,sha256=vYuahNkkF4M2pWAJaaraIZq70EmMgpvAJcUMF1Pzhko,2009
179
- monopyly/templates/credit/statement_summary.html,sha256=AbRNlb6bhALpD7Cu7HgopeDjQ2VVHY3Lk2DcWL7cW1o,2601
180
- monopyly/templates/credit/statements.html,sha256=2A65crmxXMwW7FQdJEYuBv32QJ8T9lF1jayKzmJX2zA,1731
191
+ monopyly/templates/credit/statement_summary.html,sha256=RGwgkolnD8690OwSUgklP4Wc_dfvVrHyrv1VqpCv_iE,2893
192
+ monopyly/templates/credit/statements.html,sha256=Je3V7td2xubug4uFT0D8YUKbeEvk2yA9_Z0f7mystTU,1769
181
193
  monopyly/templates/credit/statements_page.html,sha256=s_CSiRO8iTcCoEPVRF2TEOG2XNOeuGF1BSiJGhrH5O0,1458
182
194
  monopyly/templates/credit/tags_page.html,sha256=mKm-QxuicO5MO12JOQy7tuc8Bd9fnnKiTSHDmMP5mTI,662
183
195
  monopyly/templates/credit/transaction_submission_page.html,sha256=eR9v76wlLQ7Skeb-2L-rIKTSRQGCXjTGTO7efgwn_6M,1919
@@ -185,7 +197,7 @@ monopyly/templates/credit/transactions_page.html,sha256=4Tx2yUGPUIRfz0M3vAQqjcfH
185
197
  monopyly/templates/credit/card_form/card_form.html,sha256=xF7x1RBQyAfKYuW_cRxwhKhug4tum-3s0YHyP0ovhFs,1666
186
198
  monopyly/templates/credit/card_form/card_form_page_new.html,sha256=9ayX0dUEAbSSPVL3vIKIBJYkN8odL_KHOfq3fl6C8yw,525
187
199
  monopyly/templates/credit/card_form/transfer_statement_inquiry.html,sha256=LuxietZsTLF3AMqeeHqcPoAYvJX_TsJ8MlDldpZwpoQ,1228
188
- monopyly/templates/credit/card_graphic/card_back.html,sha256=AbpxlQVdz-8ryHSMhY2Uj153YFMbQPTO4XsmLvxUt2A,888
200
+ monopyly/templates/credit/card_graphic/card_back.html,sha256=gfr3975mziF0PCd_f2Jy83Y4ktFeFnZ1icVVpiVwoQA,889
189
201
  monopyly/templates/credit/card_graphic/card_front.html,sha256=I53u0WvrQj-m2D-fkcga0GRketfpMuMXNM6Rs0e5CNA,679
190
202
  monopyly/templates/credit/tag_tree/subtag_tree.html,sha256=wMt4BbLIxkioQiWmdIcEVD1xz21uuXtSB08VxJUPB2I,580
191
203
  monopyly/templates/credit/tag_tree/tag_tree.html,sha256=cAsYpZWfguZWivALn4hE8fRVD6YsSvmIzRg2g5RSJTg,345
@@ -197,9 +209,9 @@ monopyly/templates/credit/transactions_table/condensed_row_content.html,sha256=T
197
209
  monopyly/templates/credit/transactions_table/expanded_row_content.html,sha256=oL1BqlEC3H6s3fSI9Vb65DLL-P9OPliPqqiGL4av4Xs,1971
198
210
  monopyly/templates/credit/transactions_table/transaction_field_titles.html,sha256=km-3YEDJaygwcKV-rwYnrE7xF8u4Z7jCBsk0Ia-LO-M,758
199
211
  monopyly/templates/credit/transactions_table/transactions.html,sha256=tcppv0qNV-Qq6U5jfxoNyGKPXmyV9h9nR6rw4jXfBsY,481
200
- monopyly-1.4.5.dist-info/METADATA,sha256=TqoEGZHc_0jVkZcUAEajm_heYNktTAYJs0r_LdrLaQ0,10206
201
- monopyly-1.4.5.dist-info/WHEEL,sha256=Fd6mP6ydyRguakwUJ05oBE7fh2IPxgtDN9IwHJ9OqJQ,87
202
- monopyly-1.4.5.dist-info/entry_points.txt,sha256=ANAwWNF6IG83opRITM2P9i_im_b6qLdG1n7dAcS2ZNU,51
203
- monopyly-1.4.5.dist-info/licenses/COPYING,sha256=5X8cMguM-HmKfS_4Om-eBqM6A1hfbgZf6pfx2G24QFI,35150
204
- monopyly-1.4.5.dist-info/licenses/LICENSE,sha256=94rIicMccmTPhqXiRLV9JsU8P2ocMuEUUtUpp6LPKiE,253
205
- monopyly-1.4.5.dist-info/RECORD,,
212
+ monopyly-1.4.7.dist-info/METADATA,sha256=7ZTOH0Fw5UhAhzb4MzeGdUNYpljWSnWYE3f1kTxSM9o,10952
213
+ monopyly-1.4.7.dist-info/WHEEL,sha256=Fd6mP6ydyRguakwUJ05oBE7fh2IPxgtDN9IwHJ9OqJQ,87
214
+ monopyly-1.4.7.dist-info/entry_points.txt,sha256=ANAwWNF6IG83opRITM2P9i_im_b6qLdG1n7dAcS2ZNU,51
215
+ monopyly-1.4.7.dist-info/licenses/COPYING,sha256=5X8cMguM-HmKfS_4Om-eBqM6A1hfbgZf6pfx2G24QFI,35150
216
+ monopyly-1.4.7.dist-info/licenses/LICENSE,sha256=94rIicMccmTPhqXiRLV9JsU8P2ocMuEUUtUpp6LPKiE,253
217
+ monopyly-1.4.7.dist-info/RECORD,,
@@ -1,20 +0,0 @@
1
- {% extends "layout.html" %}
2
-
3
- {% block title %}
4
- Credits
5
- {% endblock %}
6
-
7
- {% block header %}
8
- <h1>Credits</h1>
9
- {% endblock %}
10
-
11
- {% block content %}
12
-
13
- <h3>Image Credits</h3>
14
-
15
- <p>
16
- The chain link icon was adapted from <a href="https://commons.wikimedia.org/wiki/File:Chain_link_icon.png">Wikipedia Commons</a>.
17
- The original image was created by user Mdowdell and published under the <a href="https://creativecommons.org/licenses/by-sa/3.0/legalcode">CC BY-SA 3.0 License</a>.
18
- </p>
19
-
20
- {% endblock %}
File without changes
File without changes