monopyly 1.4.6__py3-none-any.whl → 1.4.8__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/CHANGELOG.md +195 -0
- monopyly/README.md +14 -3
- monopyly/__init__.py +20 -1
- monopyly/_version.py +2 -2
- monopyly/auth/actions.py +7 -2
- monopyly/banking/accounts.py +1 -1
- monopyly/banking/actions.py +51 -10
- monopyly/banking/routes.py +2 -1
- monopyly/cli/apps.py +51 -28
- monopyly/cli/{run.py → launch.py} +18 -10
- monopyly/common/forms/_forms.py +4 -1
- monopyly/core/actions.py +108 -21
- monopyly/core/blueprint.py +1 -1
- monopyly/core/context_processors.py +10 -0
- monopyly/core/errors.py +9 -0
- monopyly/core/filters.py +4 -2
- monopyly/core/routes.py +22 -9
- monopyly/credit/routes.py +9 -1
- monopyly/credit/transactions/_transactions.py +1 -1
- monopyly/static/css/style.css +166 -73
- monopyly/static/js/make-payment.js +4 -2
- monopyly/templates/banking/account_summaries.html +26 -12
- monopyly/templates/banking/account_summaries_page.html +2 -1
- monopyly/templates/banking/account_summary.html +7 -2
- monopyly/templates/banking/accounts_page.html +2 -2
- monopyly/templates/core/credits.html +32 -0
- monopyly/templates/core/errors/400.html +8 -0
- monopyly/templates/core/errors/401.html +8 -0
- monopyly/templates/core/errors/403.html +8 -0
- monopyly/templates/core/errors/404.html +8 -0
- monopyly/templates/core/errors/405.html +8 -0
- monopyly/templates/core/errors/408.html +8 -0
- monopyly/templates/core/errors/418.html +8 -0
- monopyly/templates/core/errors/425.html +8 -0
- monopyly/templates/core/errors/500.html +8 -0
- monopyly/templates/core/errors/error.html +31 -0
- monopyly/templates/{profile.html → core/profile.html} +3 -1
- monopyly/templates/core/story.html +62 -0
- monopyly/templates/credit/statement_summary.html +7 -2
- monopyly/templates/credit/statements.html +7 -6
- monopyly/templates/layout.html +11 -2
- {monopyly-1.4.6.dist-info → monopyly-1.4.8.dist-info}/METADATA +15 -4
- {monopyly-1.4.6.dist-info → monopyly-1.4.8.dist-info}/RECORD +48 -36
- monopyly-1.4.8.dist-info/entry_points.txt +2 -0
- monopyly/templates/credits.html +0 -20
- monopyly/templates/story.html +0 -47
- monopyly-1.4.6.dist-info/entry_points.txt +0 -2
- /monopyly/templates/{index.html → core/index.html} +0 -0
- {monopyly-1.4.6.dist-info → monopyly-1.4.8.dist-info}/WHEEL +0 -0
- {monopyly-1.4.6.dist-info → monopyly-1.4.8.dist-info}/licenses/COPYING +0 -0
- {monopyly-1.4.6.dist-info → monopyly-1.4.8.dist-info}/licenses/LICENSE +0 -0
|
@@ -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="
|
|
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>
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
{% extends "layout.html" %}
|
|
2
|
+
|
|
3
|
+
{% block title %}
|
|
4
|
+
Story
|
|
5
|
+
{% endblock %}
|
|
6
|
+
|
|
7
|
+
{% block header %}
|
|
8
|
+
<h1>Pass go and collect $200</h1>
|
|
9
|
+
{% endblock %}
|
|
10
|
+
|
|
11
|
+
{% block content %}
|
|
12
|
+
<div id="story" class="about">
|
|
13
|
+
<p>
|
|
14
|
+
It started with Microsoft Excel.
|
|
15
|
+
</p>
|
|
16
|
+
<p>
|
|
17
|
+
When I got my first bank account, my dad taught me how to keep track of all my finances in an Excel workbook.
|
|
18
|
+
It worked for a while, and as I acquired a handful of credit cards, investments, and other types of bank accounts, I kept adding sheets to that file.
|
|
19
|
+
Of course, since I was tracking all that data, I wanted to wring as much information out of it as I possibly could—and so I started working rudimentary analytics into the spreadsheet.
|
|
20
|
+
</p>
|
|
21
|
+
|
|
22
|
+
<p>
|
|
23
|
+
This all kept me satisfied until about halfway through college when I began learning Python.
|
|
24
|
+
Excel was getting cumbersome, and I wanted to be able to sort and tag types of transactions, link credit card payments with bank withdrawals, and create spending reports.
|
|
25
|
+
Seeing the potential ways I could use a standalone programming language to up my game, I realized that what I really needed was a database.
|
|
26
|
+
As I transitioned to graduate school, I also transitioned to tracking my finances in a MySQL database, accessed with Python through a set of Jupyter notebooks.
|
|
27
|
+
That approach gave me so much more power and flexibilty, but it still felt a little clunky.
|
|
28
|
+
</p>
|
|
29
|
+
|
|
30
|
+
<p>
|
|
31
|
+
My ideal situation?
|
|
32
|
+
</p>
|
|
33
|
+
|
|
34
|
+
<p>
|
|
35
|
+
I ultimately wanted a system that keep track of everything—credit card transactions, bank accounts, investments, retirement accounts, all that $—in one place.
|
|
36
|
+
Obviously there are mega-apps that already do all this, but I never wanted to go that route.
|
|
37
|
+
I'd always managed my finances independently, and had zero interest in ceding that control.
|
|
38
|
+
For one, I wanted to maintain some privacy regarding my financial data, because who knows how those apps are using that information.
|
|
39
|
+
Two, I didn't want <em>all</em> the bells and whistles (and advertisements) that those mega-apps would force upon me, but I also wanted something I could customize when I didn't like a feature... or when I wanted more.
|
|
40
|
+
And three, most importantly, it seemed like a fun challenge that would keep me deeply engaged in managing my own financial picture.
|
|
41
|
+
</p>
|
|
42
|
+
|
|
43
|
+
<p>
|
|
44
|
+
That's how this app came about.
|
|
45
|
+
I started by trying to just create a GUI for my Python database interface, but that didn't offer the graphic flexibility of a web app.
|
|
46
|
+
Why fight to build a nice Tkinter GUI if I'd eventually get sick of that too?
|
|
47
|
+
(Tkinter is also a bit of a pain to code, and a bigger pain to test, and <em>that</em> certainly wouldn't do.)
|
|
48
|
+
Anyway, I'd always wanted to create an app, and I figured this was as good a chance as any to get started.
|
|
49
|
+
Win-win.
|
|
50
|
+
</p>
|
|
51
|
+
|
|
52
|
+
<p>
|
|
53
|
+
If you're reading this, I suppose it means you've stumbled across the program out of interest (or maybe you're just curious what the hell this nutjob is wasting his time on).
|
|
54
|
+
If the former, cool!
|
|
55
|
+
Feel free to look around or take it for a spin.
|
|
56
|
+
I intend to always keep the basic concept open source, so play around as much as you'd like!
|
|
57
|
+
</p>
|
|
58
|
+
|
|
59
|
+
<p class="signature">-Mitch</p>
|
|
60
|
+
</div>
|
|
61
|
+
|
|
62
|
+
{% endblock %}
|
|
@@ -9,8 +9,13 @@
|
|
|
9
9
|
</div>
|
|
10
10
|
|
|
11
11
|
<div class="balance">
|
|
12
|
-
|
|
13
|
-
|
|
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">
|
|
@@ -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-
|
|
5
|
+
<div class="card-stack group-stack">
|
|
6
6
|
|
|
7
|
-
<
|
|
8
|
-
|
|
9
|
-
|
|
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
|
|
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) }}">
|
monopyly/templates/layout.html
CHANGED
|
@@ -43,7 +43,12 @@
|
|
|
43
43
|
<div class="container">
|
|
44
44
|
|
|
45
45
|
<a href="{{ url_for('core.index') }}">
|
|
46
|
-
<h1 class="monopyly-logo">
|
|
46
|
+
<h1 class="monopyly-logo">
|
|
47
|
+
Monopyly
|
|
48
|
+
{%- if config['DEBUG'] -%}
|
|
49
|
+
<span class="development-mode">.dev</span>
|
|
50
|
+
{%- endif -%}
|
|
51
|
+
</h1>
|
|
47
52
|
</a>
|
|
48
53
|
|
|
49
54
|
<nav id="nav-menu">
|
|
@@ -52,7 +57,11 @@
|
|
|
52
57
|
<li><a href="{{ url_for('core.index') }}">Home</a></li>
|
|
53
58
|
<li><a href="{{ url_for('core.about') }}">About</a></li>
|
|
54
59
|
{% if g.user %}
|
|
55
|
-
<li
|
|
60
|
+
<li>
|
|
61
|
+
<a href="{{url_for('core.load_profile') }}" class="username">
|
|
62
|
+
{{ g.user.username }}
|
|
63
|
+
</a>
|
|
64
|
+
</li>
|
|
56
65
|
<li><a href="{{ url_for('auth.logout') }}">Log Out</a></li>
|
|
57
66
|
{% else %}
|
|
58
67
|
<li><a href="{{ url_for('auth.register') }}">Register</a></li>
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: monopyly
|
|
3
|
-
Version: 1.4.
|
|
3
|
+
Version: 1.4.8
|
|
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
|
|
@@ -58,17 +58,28 @@ To install the app, simply run
|
|
|
58
58
|
$ pip install monopyly
|
|
59
59
|
```
|
|
60
60
|
|
|
61
|
-
The package requires a recent version of Python (3.
|
|
61
|
+
The package requires a recent version of Python (3.10+).
|
|
62
62
|
|
|
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
|
|
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,52 +1,54 @@
|
|
|
1
|
-
monopyly/
|
|
2
|
-
monopyly/
|
|
3
|
-
monopyly/
|
|
4
|
-
monopyly/
|
|
1
|
+
monopyly/CHANGELOG.md,sha256=1IibmFq7TR7cIAVhFhCRKKQPdn9-bzBwmY5EhTsp2pA,7388
|
|
2
|
+
monopyly/README.md,sha256=cm1wli7E-xybYoJr-tsrNgfIO6TPrLsraMUSO26D6xk,9028
|
|
3
|
+
monopyly/__init__.py,sha256=1EYKyyHgORJ4Zh-3AB5R3AuLS0mqREwN1-iPDrZZUZs,2182
|
|
4
|
+
monopyly/_version.py,sha256=o7K855LfRl1a6KN9ryI52BaWntUGitBJboNncGT-QCk,160
|
|
5
|
+
monopyly/auth/actions.py,sha256=zFDb_EATufsJMzQ4rX0bzlme8e62mXFpYtQvc_k0jEc,375
|
|
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=
|
|
9
|
-
monopyly/banking/actions.py,sha256=
|
|
9
|
+
monopyly/banking/accounts.py,sha256=yYlXvyhLBQoBZYr_WMk6_3nxlhwU4NEkCYKv5hHFjcM,9828
|
|
10
|
+
monopyly/banking/actions.py,sha256=NvButozWJNRuNIiyM-Gy88XLTpIjNcEGSQcLMfEwOUg,3258
|
|
10
11
|
monopyly/banking/banks.py,sha256=X1seKJrec-o8z-bM0wVTR42vMx1q5A9Lf2jNUtINlrQ,1745
|
|
11
12
|
monopyly/banking/blueprint.py,sha256=PDsqe4DmiT7cDYW9IxxTfizu9Lqol1Lhp7ajMK6fUuI,255
|
|
12
13
|
monopyly/banking/filters.py,sha256=wCsAUh592B5BmGFC9NqmrJZ0NdQZi21hvy0QsKqhgLg,685
|
|
13
14
|
monopyly/banking/forms.py,sha256=p-YGZgdKugk3VKILLiQNEH5KQmXop5G8P1Bs4sUqbK0,10506
|
|
14
|
-
monopyly/banking/routes.py,sha256=
|
|
15
|
+
monopyly/banking/routes.py,sha256=mykWVtV_4f096-NWDWE5aPYoBvGjeNpBSyY9Kb_nQGc,8232
|
|
15
16
|
monopyly/banking/transactions.py,sha256=2_wFXl4ZrHzLoFGz72ksYA2_8UvB0N1wtBFd8kTwTyQ,8454
|
|
16
|
-
monopyly/cli/apps.py,sha256=
|
|
17
|
-
monopyly/cli/
|
|
17
|
+
monopyly/cli/apps.py,sha256=v5l8eOvQddJc-Y3B3d-1xwSJcPMb-QyqbcGxZjlYczQ,3442
|
|
18
|
+
monopyly/cli/launch.py,sha256=UszkXSDh1SDEZNK2utLpnEK1rRPJ3iamNuulxxmyXLU,4000
|
|
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=
|
|
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=
|
|
29
|
-
monopyly/core/blueprint.py,sha256=
|
|
30
|
-
monopyly/core/context_processors.py,sha256=
|
|
31
|
-
monopyly/core/
|
|
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=
|
|
35
|
+
monopyly/core/routes.py,sha256=ADF7LB3hhvwPwIqc5l46sliziM7ZgGXh5vFwKzxlkGA,2747
|
|
34
36
|
monopyly/credit/accounts.py,sha256=otQmuTDJZYX868EZl80n89XlzfiwlnBkfSXZa65rSqI,1898
|
|
35
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=
|
|
41
|
+
monopyly/credit/routes.py,sha256=zw3if37eHibdh4VwbgpxHUPt_UrF-n8fAxZe3Tn1WWI,18127
|
|
40
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=
|
|
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=
|
|
51
|
+
monopyly/static/css/style.css,sha256=cmehDMaKF9uJB6ZjAcq81C3SnQx3sJxMUeDbWbl1gRI,50703
|
|
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=
|
|
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,18 +138,14 @@ 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/
|
|
140
|
-
monopyly/templates/index.html,sha256=caoQuizzJibU90nivf1-Esnptg5wzFWyhVJoAkEPKdE,4374
|
|
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
|
|
141
|
+
monopyly/templates/layout.html,sha256=AOlElsehSKBKnejYWZfn33jA04lGrViP_NcNF24vI7U,4955
|
|
144
142
|
monopyly/templates/auth/login.html,sha256=aZwaHBiKtQa_ZkVBqLUQIbwQdEAJNwcyYNjFQcRp-k0,443
|
|
145
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=
|
|
148
|
-
monopyly/templates/banking/account_summaries_page.html,sha256=
|
|
149
|
-
monopyly/templates/banking/account_summary.html,sha256=
|
|
150
|
-
monopyly/templates/banking/accounts_page.html,sha256=
|
|
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
|
|
@@ -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=iEKfX1aHxXrstAeeQ6J8Gnvg1zGt95c-iLELUhG-AtE,3331
|
|
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=
|
|
180
|
-
monopyly/templates/credit/statements.html,sha256=
|
|
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
|
|
@@ -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.
|
|
201
|
-
monopyly-1.4.
|
|
202
|
-
monopyly-1.4.
|
|
203
|
-
monopyly-1.4.
|
|
204
|
-
monopyly-1.4.
|
|
205
|
-
monopyly-1.4.
|
|
212
|
+
monopyly-1.4.8.dist-info/METADATA,sha256=y9TCCzprVzIUZ1OEGpkqQk9issz0EzhDKbaoM8xCT04,10953
|
|
213
|
+
monopyly-1.4.8.dist-info/WHEEL,sha256=Fd6mP6ydyRguakwUJ05oBE7fh2IPxgtDN9IwHJ9OqJQ,87
|
|
214
|
+
monopyly-1.4.8.dist-info/entry_points.txt,sha256=_GmCja7NEqYHlGlVbz4rThqk0SIOmFUkiE8mN1dwgdY,58
|
|
215
|
+
monopyly-1.4.8.dist-info/licenses/COPYING,sha256=5X8cMguM-HmKfS_4Om-eBqM6A1hfbgZf6pfx2G24QFI,35150
|
|
216
|
+
monopyly-1.4.8.dist-info/licenses/LICENSE,sha256=94rIicMccmTPhqXiRLV9JsU8P2ocMuEUUtUpp6LPKiE,253
|
|
217
|
+
monopyly-1.4.8.dist-info/RECORD,,
|
monopyly/templates/credits.html
DELETED
|
@@ -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 %}
|
monopyly/templates/story.html
DELETED
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
{% extends "layout.html" %}
|
|
2
|
-
|
|
3
|
-
{% block title %}
|
|
4
|
-
Story
|
|
5
|
-
{% endblock %}
|
|
6
|
-
|
|
7
|
-
{% block header %}
|
|
8
|
-
<h1>Pass go and collect $200</h1>
|
|
9
|
-
{% endblock %}
|
|
10
|
-
|
|
11
|
-
{% block content %}
|
|
12
|
-
<div id="story" class="about">
|
|
13
|
-
<p>It started with Microsoft Excel. </p>
|
|
14
|
-
<p>When I got my first bank account, my dad taught me how to keep track of all my finances in an Excel workbook.
|
|
15
|
-
It worked for a while, and as I acquired a handful of credit cards, investments, and other types of bank accounts, I kept adding sheets to that file.
|
|
16
|
-
Of course, since I was tracking all that data, I wanted to wring as much information out of it as I possibly could—and so I started working rudimentary analytics into the spreadsheet.
|
|
17
|
-
</p>
|
|
18
|
-
|
|
19
|
-
</p>
|
|
20
|
-
This all kept me satisfied until about halfway through college when I began learning Python.
|
|
21
|
-
Excel was getting cumbersome, and I wanted to be able to sort and tag types of transactions, link credit card payments with bank withdrawals, and create spending reports.
|
|
22
|
-
Seeing the potential ways I could use a standalone programming language to up my game, I realized that what I really needed was a database.
|
|
23
|
-
As I transitioned to graduate school, I also transitioned to tracking my finances in a MySQL database, accessed with Python through a set of Jupyter notebooks.
|
|
24
|
-
That approach gave me so much more power and flexibilty, but it still felt a little clunky.</p>
|
|
25
|
-
|
|
26
|
-
<p>My ideal situation?</p>
|
|
27
|
-
|
|
28
|
-
<p>I ultimately wanted a system that keep track of everything—credit card transactions, bank accounts, investments, retirement accounts, all that $—in one place.
|
|
29
|
-
Obviously there are mega-apps that already do all this, but I never wanted to go that route.
|
|
30
|
-
I'd always managed my finances independently, and had zero interest in ceding that control.
|
|
31
|
-
For one, I wanted to maintain some privacy regarding my financial data, because who knows how those apps are using that information.
|
|
32
|
-
Two, I didn't want <em>all</em> the bells and whistles (and advertisements) that those mega-apps would force upon me, but I also wanted something I could customize when I didn't like a feature... or when I wanted more.
|
|
33
|
-
And three, most importantly, it seemed like a fun challenge that would keep me deeply engaged in managing my own financial picture.
|
|
34
|
-
|
|
35
|
-
<p>That's how this app came about.
|
|
36
|
-
I started by trying to just create a GUI for my Python database interface, but that didn't offer the graphic flexibility of a web app.
|
|
37
|
-
Why fight to build a nice Tkinter GUI if I'd eventually get sick of that too?
|
|
38
|
-
(Tkinter is also a bit of a pain to code, and a bigger pain to test, and <em>that</em> certainly wouldn't do.)
|
|
39
|
-
Anyway, I'd always wanted to create an app, and I figured this was as good a chance as any to get started.
|
|
40
|
-
Win-win.</p>
|
|
41
|
-
|
|
42
|
-
<p>If you're reading this, I suppose it means you've stumbled across the program out of interest (or maybe you're just curious what the hell this nutjob is wasting his time on). If the former, cool! Feel free to look around or take it for a spin. I intend to always keep the basic concept open source, so play around as much as you'd like!</p>
|
|
43
|
-
|
|
44
|
-
<p class="signature">-Mitch</p>
|
|
45
|
-
</div>
|
|
46
|
-
|
|
47
|
-
{% endblock %}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|