monopyly 1.4.5__py3-none-any.whl → 1.4.6__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/_version.py CHANGED
@@ -1,4 +1,4 @@
1
1
  # file generated by setuptools_scm
2
2
  # don't change, don't track in version control
3
- __version__ = version = '1.4.5'
4
- __version_tuple__ = version_tuple = (1, 4, 5)
3
+ __version__ = version = '1.4.6'
4
+ __version_tuple__ = version_tuple = (1, 4, 6)
@@ -34,16 +34,6 @@ class EntryForm(FlaskForm, metaclass=AbstractEntryFormMixinMeta):
34
34
  """
35
35
  Generate a duplicate prepopulated form.
36
36
 
37
- Notes
38
- -----
39
- WTForms requires that a form be instantiated in order to be
40
- able to properly introspect fields. Because of this, this method
41
- will only return a duplicate form matching the type of the
42
- form instance used to call it. Using the form's process method
43
- will not properly handle enumeration of field lists, so it
44
- can not be used as a replacement for populating an existing
45
- form.
46
-
47
37
  Parameters
48
38
  ----------
49
39
  entry : database.models.Model
@@ -55,6 +45,16 @@ class EntryForm(FlaskForm, metaclass=AbstractEntryFormMixinMeta):
55
45
  form : EntryForm
56
46
  A duplicate form, prepopulated with the collected database
57
47
  information.
48
+
49
+ Notes
50
+ -----
51
+ WTForms requires that a form be instantiated in order to be
52
+ able to properly introspect fields. Because of this, this method
53
+ will only return a duplicate form matching the type of the
54
+ form instance used to call it. Using the form's process method
55
+ will not properly handle enumeration of field lists, so it
56
+ can not be used as a replacement for populating an existing
57
+ form.
58
58
  """
59
59
  data = self.gather_entry_data(entry)
60
60
  return self.__class__(data=data)
@@ -13,7 +13,7 @@ def get_card_statement_grouping(cards):
13
13
 
14
14
  Parameters
15
15
  ----------
16
- cards : list of sqlite3.Row
16
+ cards : list of database.models.CreditCard
17
17
  The database card entries for which to get statements.
18
18
 
19
19
  Returns
@@ -31,6 +31,33 @@ def get_card_statement_grouping(cards):
31
31
  return card_statements
32
32
 
33
33
 
34
+ def get_statement_and_transactions(statement_id, transaction_sort_order="DESC"):
35
+ """
36
+ Given a statement ID, get the corresponding statement and transactions.
37
+
38
+ Parameters
39
+ ----------
40
+ statement_id : int
41
+ The ID of the statement to acquire.
42
+ transaction_sort_order : str
43
+ The order to sort transactions returned for the statement. The
44
+ default is 'DESC' for transactions sorted in descending order.
45
+
46
+ Returns
47
+ -------
48
+ statement : database.models.CreditStatementView
49
+ The statement with the given ID.
50
+ transactions : list of database.models.CreditTransactionView
51
+ All transactions on the statement with the given ID.
52
+ """
53
+ statement = CreditStatementHandler.get_entry(statement_id)
54
+ transactions = CreditTransactionHandler.get_transactions(
55
+ statement_ids=(statement_id,),
56
+ sort_order=transaction_sort_order,
57
+ )
58
+ return statement, transactions.all()
59
+
60
+
34
61
  def get_potential_preceding_card(card):
35
62
  """
36
63
  Get the card that this new card may be intended to replace (if any).
@@ -42,7 +69,7 @@ def get_potential_preceding_card(card):
42
69
 
43
70
  Parameters
44
71
  ----------
45
- card : sqlite3.Row
72
+ card : database.models.CreditCard
46
73
  The new card being added to the database.
47
74
 
48
75
  Returns
monopyly/credit/routes.py CHANGED
@@ -22,6 +22,7 @@ from .accounts import CreditAccountHandler
22
22
  from .actions import (
23
23
  get_card_statement_grouping,
24
24
  get_potential_preceding_card,
25
+ get_statement_and_transactions,
25
26
  make_payment,
26
27
  transfer_credit_card_statement,
27
28
  )
@@ -177,11 +178,7 @@ def update_statements_display():
177
178
  @bp.route("/statement/<int:statement_id>")
178
179
  @login_required
179
180
  def load_statement_details(statement_id):
180
- statement = CreditStatementHandler.get_entry(statement_id)
181
- transactions = CreditTransactionHandler.get_transactions(
182
- statement_ids=(statement_id,),
183
- sort_order="DESC",
184
- )
181
+ statement, transactions = get_statement_and_transactions(statement_id)
185
182
  # Get bank accounts for potential payments
186
183
  bank_accounts = BankAccountHandler.get_accounts()
187
184
  return render_template(
@@ -3,6 +3,7 @@ Tools for interacting with the credit statements in the database.
3
3
  """
4
4
 
5
5
  from authanor.database.handler import DatabaseViewHandler
6
+ from dateutil.relativedelta import relativedelta
6
7
 
7
8
  from ..common.utils import get_next_occurrence_of_day
8
9
  from ..database.models import (
@@ -136,7 +137,7 @@ class CreditStatementHandler(
136
137
 
137
138
  Returns
138
139
  -------
139
- statement : database.models.CreditStatementView
140
+ statement : database.models.CreditStatement
140
141
  The inferred statement entry for the transaction.
141
142
  """
142
143
  issue_day = card.account.statement_issue_day
@@ -146,6 +147,25 @@ class CreditStatementHandler(
146
147
  statement = cls.add_statement(card, issue_date)
147
148
  return statement
148
149
 
150
+ @classmethod
151
+ @DatabaseViewHandler.view_query
152
+ def get_prior_statement(cls, statement):
153
+ """
154
+ Given a statement, get the immediately preceding statement.
155
+
156
+ Parameters
157
+ ----------
158
+ statement : database.models.CreditStatement
159
+ The statement for which to find the preceding statement.
160
+
161
+ Returns
162
+ -------
163
+ statement : database.models.CreditStatementView
164
+ The statement immediately preceding the given statement.
165
+ """
166
+ issue_date = statement.issue_date + relativedelta(months=-1)
167
+ return cls.find_statement(statement.card.id, issue_date=issue_date)
168
+
149
169
  @classmethod
150
170
  def add_statement(cls, card, issue_date, due_date=None):
151
171
  """Add a statement to the database."""
@@ -1664,6 +1664,10 @@ form .autocomplete-box .item.active {
1664
1664
  text-align: center;
1665
1665
  }
1666
1666
 
1667
+ .details .summary-box .balance .dollar-sign {
1668
+ margin-right: 5px;
1669
+ }
1670
+
1667
1671
  .details .summary-box .projected-balance .amount {
1668
1672
  color: var(--moneytree);
1669
1673
  font-weight: 500;
@@ -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 %}
@@ -9,7 +9,7 @@
9
9
  </div>
10
10
 
11
11
  <div class="balance">
12
- <div>$</div>
12
+ <div class="dollar-sign">$</div>
13
13
  <div>{{ account.balance|currency }}</div>
14
14
  </div>
15
15
 
@@ -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
 
@@ -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,7 +9,7 @@
9
9
  </div>
10
10
 
11
11
  <div class="balance">
12
- <div>$</div>
12
+ <div class="dollar-sign">$</div>
13
13
  <div>{{ statement.balance|currency }}</div>
14
14
  </div>
15
15
 
@@ -47,8 +47,8 @@
47
47
 
48
48
  <div class="form-line">
49
49
  <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"/>
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" />
52
52
  </div>
53
53
 
54
54
  <div class="form-line">
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: monopyly
3
- Version: 1.4.5
3
+ Version: 1.4.6
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
@@ -1,6 +1,6 @@
1
1
  monopyly/README.md,sha256=T-Avdpr3whgP6g0P_w-u02CSwzBH2yRnleRrM1sKrj4,8281
2
2
  monopyly/__init__.py,sha256=YxMJAI5ig4-jlFyBGy4gOC_H5cp8a4L2sGmoX5bRYjU,1763
3
- monopyly/_version.py,sha256=Q6unsBbzWHPRNufBzIDL-pvFPHC27FQ8CYCDAcnbQoY,160
3
+ monopyly/_version.py,sha256=rcHU37_iyVNYVuSTTj5Shc-mUDPpQw2cyeznRUHdnOc,160
4
4
  monopyly/auth/actions.py,sha256=T99eAP8dxFZMzLu2LxZFIXGYIroP8I7KJ-WJ8GJ1gws,260
5
5
  monopyly/auth/blueprint.py,sha256=sFbmTvSBhjv1pn2gJLH5J6zanPLuemmWbgEj5ZKCiTY,244
6
6
  monopyly/auth/routes.py,sha256=mODJHrdFhffusfbYwQ_wpIY7eAE7Gh7irosIef4Mluc,2902
@@ -18,7 +18,7 @@ monopyly/cli/run.py,sha256=8NHv5TW5Ze6pyhxZCOjmba-EU4Nu6sObYfNJbDPtrds,3838
18
18
  monopyly/common/transactions.py,sha256=2-EkctGC9k5W5kodXdYJIBXu5l5JNI9dxfgbp2Nxccg,12185
19
19
  monopyly/common/utils.py,sha256=BjXhfNXGWkAPt-ebldvmZ2z00P8MhKJzjxrJJ6mzRQY,5867
20
20
  monopyly/common/forms/__init__.py,sha256=6iFTlcoaQmCbrjS1KfFhWXQUfyqnA-vKPMVxLyJMlXY,120
21
- monopyly/common/forms/_forms.py,sha256=IlN1CMBNNFicvGzH82YYqd4SZodoRm-rlc7VwNgmHro,7814
21
+ monopyly/common/forms/_forms.py,sha256=TjWEe62LQ3j-OQqzu0whz8CyhQVixhiHCqnMR_n7zmU,7814
22
22
  monopyly/common/forms/fields.py,sha256=XgvkfszpUAZyIs-osHGFADmzuo0Ni_e78NXtG-grBdI,4082
23
23
  monopyly/common/forms/utils.py,sha256=awZOtWaohzSW_SZrXhUpJBY1AXPnKBFTG2cqim22Db0,5676
24
24
  monopyly/common/forms/validators.py,sha256=C5_NN8ktvBw6MrSXwv_x9_SQohCNmnp4brNQFELHBlI,1205
@@ -32,12 +32,12 @@ monopyly/core/filters.py,sha256=9EQCHqLD3LEuyVkAE6_XCVjU1BezgAUsSWAS4PAzIb4,1253
32
32
  monopyly/core/internal_transactions.py,sha256=PImeViMU9rdDDPLXld1xC6bdAoulzRDr0zci4pUQY8I,459
33
33
  monopyly/core/routes.py,sha256=BSeqMFu5XSm2MuMBDHwPAaOiLeMjO3KsFYm5RySzS8c,2427
34
34
  monopyly/credit/accounts.py,sha256=otQmuTDJZYX868EZl80n89XlzfiwlnBkfSXZa65rSqI,1898
35
- monopyly/credit/actions.py,sha256=ilYdpNjzzbZSYx3pTkBTcfqA_vS8g74ee0l4_EgLpZ8,5334
35
+ monopyly/credit/actions.py,sha256=E80ocYxWKsNO1ynU3KQjVZkTwAGo4Fv7mYPmA68T9ng,6310
36
36
  monopyly/credit/blueprint.py,sha256=XbrMhtyCp2732uWPB2kjn_W8P8pH8RVTwo9P8Pt--Is,251
37
37
  monopyly/credit/cards.py,sha256=9Ug51aY2-G8SzooLC-FemRNeTBLd9JOpXHFW74EcdLU,5614
38
38
  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
39
+ monopyly/credit/routes.py,sha256=XIVuf6WEbwlDkNPi1RSyCxSgS3JbobikINBQpYb1r44,17794
40
+ monopyly/credit/statements.py,sha256=lRcAgcr9kPnh5GCE6McWfOdY8uCgmg2j2bikSioR3HI,7219
41
41
  monopyly/credit/transactions/__init__.py,sha256=1Exn6T--HtwNCHzS_hDJ0ba7qCB7w_8C-yY3KSxvFKg,165
42
42
  monopyly/credit/transactions/_transactions.py,sha256=LqbZV1Q2bb_B6tATmBihCPm8YhcbABRUCCYhNRg9qtk,8771
43
43
  monopyly/database/__init__.py,sha256=tlZsXmzH8hB5m_RASbKTjPRqLel-xbymqrzo0TPoFCk,3402
@@ -46,7 +46,7 @@ monopyly/database/preloads.sql,sha256=KBS_WYRofFdOVN-IgHzZhfyJrY6ZOwHeExN-fQr3ht
46
46
  monopyly/database/schema.sql,sha256=cdl9b5CnYrnQ-lck147GtwArx_JJbX1vF9YYLivTeyw,4660
47
47
  monopyly/database/views.sql,sha256=UTO2QRkVTfQ12bMVkR-O6Qv80DvYo8hngPHn2A1_1F8,3853
48
48
  monopyly/static/jquery-3.7.0.min.js,sha256=2Pmvv0kuTBOenSvLm6bvfBSSHrUJ-3A7x6P5Ebd07_g,87462
49
- monopyly/static/css/style.css,sha256=TKU9Uzj7iEBNcTARinZ1fsTI4Y-qePHQAZdBKspSjkk,48860
49
+ monopyly/static/css/style.css,sha256=cBa9cFhr--fBgx7TaeegXLleUAGO2ui9TLSXmo5Sc7k,48930
50
50
  monopyly/static/favicon/browserconfig.xml,sha256=Zt_AVOxiritWWXoUwPsHpx4vu4kM_butdFVzoYCYbM8,315
51
51
  monopyly/static/favicon/favicon-114.png,sha256=kjElVFiix-kFCMdADkLpJsi8kL3GDsFm85oJhyCH-C0,20601
52
52
  monopyly/static/favicon/favicon-120.png,sha256=g4uzHMdW0MlJhcgWfrOsj2MB2D-HdLa4t60_hvyICkM,22077
@@ -141,17 +141,17 @@ monopyly/templates/index.html,sha256=caoQuizzJibU90nivf1-Esnptg5wzFWyhVJoAkEPKdE
141
141
  monopyly/templates/layout.html,sha256=ETQ7fNC4H0JjZZTnamZoJKwXbsXEHW72ZhahOER3NkQ,4741
142
142
  monopyly/templates/profile.html,sha256=qFU1lu5lbzC6p36OCcZGgRHcygmSqPpXDTLxaRDnLXU,2291
143
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
144
+ monopyly/templates/auth/login.html,sha256=aZwaHBiKtQa_ZkVBqLUQIbwQdEAJNwcyYNjFQcRp-k0,443
145
+ monopyly/templates/auth/register.html,sha256=G6VxfYPIbXQco6Z_1PVQQ40vNWgG3PScmN20npx88yQ,447
146
146
  monopyly/templates/banking/account_page.html,sha256=pP7j6pRngqO8D_kQKbRINTQ61L5VJs66dsNPscO0czs,1946
147
147
  monopyly/templates/banking/account_summaries.html,sha256=h_grH5xF94Um8F2a8Ag1I9_bwstr7e6Lpx4Ak5ISeiQ,647
148
148
  monopyly/templates/banking/account_summaries_page.html,sha256=LuAAjd8U0LDxgJoBKAtVUw-b6KGni0Osre8O3gN17fY,1086
149
- monopyly/templates/banking/account_summary.html,sha256=45vsPptiN_ZLVFG54hib9alKJHArUWtIvgqS0foi2JE,655
149
+ monopyly/templates/banking/account_summary.html,sha256=6Ol5SdO5BC7Ptr2-M9WZPvWOeHRESrVjbieKTmA-3SE,675
150
150
  monopyly/templates/banking/accounts_page.html,sha256=JYI0cfaK6lxF-aDsYQLQkfEkx9xWdgAfW1xYbZRQmGs,2149
151
151
  monopyly/templates/banking/account_form/account_form.html,sha256=v8AH6DTBW-4XVffcmr-sRRBl1k0e-30Q7Vy5sXHkrPM,1226
152
152
  monopyly/templates/banking/account_form/account_form_page_new.html,sha256=aCahQlbJfIM_vzvHJb81dG_ORpXFmOw5QzYFNep7LxY,533
153
153
  monopyly/templates/banking/transaction_form/bank_info_form.html,sha256=RkEjEgbD5zw4QlvpJ6koA8TxE0ZRTGmfmCy8SC2RVd0,670
154
- monopyly/templates/banking/transaction_form/transaction_form.html,sha256=U2JtO7Ji7kgK9zeNfUm48nVSowjv0CxHjHTK45ZXiRw,1399
154
+ monopyly/templates/banking/transaction_form/transaction_form.html,sha256=M8Jqdl50GtVLuKxV1kLNuS3eMiaDo7rXQvwq3DpPv9Q,1399
155
155
  monopyly/templates/banking/transaction_form/transaction_form_page.html,sha256=q7pPXmqhpBXZ8jJKWENisqYXPpAZxVL1bYT0lIUUZA4,526
156
156
  monopyly/templates/banking/transaction_form/transaction_form_page_new.html,sha256=-PFAF3IcJXKRg2erlGFuvwD1XMx6JvndNWjdPJbmRtA,313
157
157
  monopyly/templates/banking/transaction_form/transaction_form_page_update.html,sha256=4PljOpO7wTNNEq-mhFzA-uHvUxzerfRMbDddWvSMzlo,350
@@ -176,7 +176,7 @@ monopyly/templates/credit/card_submission_page.html,sha256=7OU6PB01jACSKSzXGySWL
176
176
  monopyly/templates/credit/cards.html,sha256=lvuKip2nHDmPi2Wj8zmO9ZXKXY22Dlv9fDrtHuYCSqA,598
177
177
  monopyly/templates/credit/cards_page.html,sha256=HTrTQwF-Y5Z9oWqt72i6HbAaRhQibTEt3TJKavm6_2M,250
178
178
  monopyly/templates/credit/statement_page.html,sha256=vYuahNkkF4M2pWAJaaraIZq70EmMgpvAJcUMF1Pzhko,2009
179
- monopyly/templates/credit/statement_summary.html,sha256=AbRNlb6bhALpD7Cu7HgopeDjQ2VVHY3Lk2DcWL7cW1o,2601
179
+ monopyly/templates/credit/statement_summary.html,sha256=V8J6QbO2K6VW8HiePWQbfo19vC4jPdUv9dRTBjiJ9nk,2623
180
180
  monopyly/templates/credit/statements.html,sha256=2A65crmxXMwW7FQdJEYuBv32QJ8T9lF1jayKzmJX2zA,1731
181
181
  monopyly/templates/credit/statements_page.html,sha256=s_CSiRO8iTcCoEPVRF2TEOG2XNOeuGF1BSiJGhrH5O0,1458
182
182
  monopyly/templates/credit/tags_page.html,sha256=mKm-QxuicO5MO12JOQy7tuc8Bd9fnnKiTSHDmMP5mTI,662
@@ -185,7 +185,7 @@ monopyly/templates/credit/transactions_page.html,sha256=4Tx2yUGPUIRfz0M3vAQqjcfH
185
185
  monopyly/templates/credit/card_form/card_form.html,sha256=xF7x1RBQyAfKYuW_cRxwhKhug4tum-3s0YHyP0ovhFs,1666
186
186
  monopyly/templates/credit/card_form/card_form_page_new.html,sha256=9ayX0dUEAbSSPVL3vIKIBJYkN8odL_KHOfq3fl6C8yw,525
187
187
  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
188
+ monopyly/templates/credit/card_graphic/card_back.html,sha256=gfr3975mziF0PCd_f2Jy83Y4ktFeFnZ1icVVpiVwoQA,889
189
189
  monopyly/templates/credit/card_graphic/card_front.html,sha256=I53u0WvrQj-m2D-fkcga0GRketfpMuMXNM6Rs0e5CNA,679
190
190
  monopyly/templates/credit/tag_tree/subtag_tree.html,sha256=wMt4BbLIxkioQiWmdIcEVD1xz21uuXtSB08VxJUPB2I,580
191
191
  monopyly/templates/credit/tag_tree/tag_tree.html,sha256=cAsYpZWfguZWivALn4hE8fRVD6YsSvmIzRg2g5RSJTg,345
@@ -197,9 +197,9 @@ monopyly/templates/credit/transactions_table/condensed_row_content.html,sha256=T
197
197
  monopyly/templates/credit/transactions_table/expanded_row_content.html,sha256=oL1BqlEC3H6s3fSI9Vb65DLL-P9OPliPqqiGL4av4Xs,1971
198
198
  monopyly/templates/credit/transactions_table/transaction_field_titles.html,sha256=km-3YEDJaygwcKV-rwYnrE7xF8u4Z7jCBsk0Ia-LO-M,758
199
199
  monopyly/templates/credit/transactions_table/transactions.html,sha256=tcppv0qNV-Qq6U5jfxoNyGKPXmyV9h9nR6rw4jXfBsY,481
200
- monopyly-1.4.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,,
200
+ monopyly-1.4.6.dist-info/METADATA,sha256=0GNEa8OFRutu8kofK7ykznrD9cEBpfxmUOdkyjyRjD4,10206
201
+ monopyly-1.4.6.dist-info/WHEEL,sha256=Fd6mP6ydyRguakwUJ05oBE7fh2IPxgtDN9IwHJ9OqJQ,87
202
+ monopyly-1.4.6.dist-info/entry_points.txt,sha256=ANAwWNF6IG83opRITM2P9i_im_b6qLdG1n7dAcS2ZNU,51
203
+ monopyly-1.4.6.dist-info/licenses/COPYING,sha256=5X8cMguM-HmKfS_4Om-eBqM6A1hfbgZf6pfx2G24QFI,35150
204
+ monopyly-1.4.6.dist-info/licenses/LICENSE,sha256=94rIicMccmTPhqXiRLV9JsU8P2ocMuEUUtUpp6LPKiE,253
205
+ monopyly-1.4.6.dist-info/RECORD,,