Browse Source

display expired accounts

Karl Hudgell 3 weeks ago
parent
commit
9573a4f0ca
3 changed files with 64 additions and 8 deletions
  1. 5 2
      app.py
  2. 38 6
      lib/datetime.py
  3. 21 0
      templates/home.html

+ 5 - 2
app.py

@@ -3,7 +3,7 @@ from flask import Flask, render_template, request, redirect, url_for, session, f
 from flask_caching import Cache
 import requests.auth
 import os
-from lib.datetime import filter_accounts_current_month
+from lib.datetime import filter_accounts_current_month, filter_accounts_expired
 from lib.reqs import get_urls, get_user_accounts, add_user_account, delete_user_account, get_user_accounts_count
 from flask import send_from_directory
 import requests
@@ -43,12 +43,15 @@ def index():
 def home():
     base_url = app.config["BASE_URL"]  # Access base_url from the config
     all_accounts = get_user_accounts(base_url, session["auth_credentials"])
+    count = len(all_accounts)
     current_month_accounts = filter_accounts_current_month(all_accounts)
+    expired_accounts = filter_accounts_expired(all_accounts)
     return render_template(
         "home.html",
         username=session["username"],
-        accounts=get_user_accounts_count(base_url, session["auth_credentials"]),
+        accounts=count,
         current_month_accounts=current_month_accounts,
+        expired_accounts=expired_accounts,
     )
 
 

+ 38 - 6
lib/datetime.py

@@ -1,17 +1,28 @@
 from datetime import datetime
-from flask import render_template
+from typing import List, Dict
 
-def filter_accounts_current_month(accounts):
-    # Get the start and end of the current month
+def filter_accounts_current_month(accounts: List[Dict[str, int]]) -> List[Dict[str, int]]:
+    """Filter accounts whose expiry date falls within the current month.
+
+    Args:
+        accounts (List[Dict[str, int]]): A list of account dictionaries, each containing 
+            an 'expiaryDate' key with an epoch timestamp as its value.
+
+    Returns:
+        List[Dict[str, int]]: A list of accounts expiring in the current month.
+    """
+    # Get the start of the current month
     now = datetime.now()
     start_of_month = datetime(now.year, now.month, 1)
+
+    # Determine the start of the next month
     if now.month == 12:
-        # If current month is December, next month is January of the next year
+        # If the current month is December, next month is January of the next year
         start_of_next_month = datetime(now.year + 1, 1, 1)
     else:
-        # Otherwise, next month is just the next month of the same year
+        # Otherwise, the next month is the following month of the same year
         start_of_next_month = datetime(now.year, now.month + 1, 1)
-    
+
     # Convert start and end of the month to epoch timestamps
     start_of_month_timestamp = int(start_of_month.timestamp())
     start_of_next_month_timestamp = int(start_of_next_month.timestamp())
@@ -23,3 +34,24 @@ def filter_accounts_current_month(accounts):
     ]
 
     return accounts_in_current_month
+
+def filter_accounts_expired(accounts: List[Dict[str, int]]) -> List[Dict[str, int]]:
+    """Filter accounts whose expiry date has passed.
+
+    Args:
+        accounts (List[Dict[str, int]]): A list of account dictionaries, each containing 
+            an 'expiaryDate' key with an epoch timestamp as its value.
+
+    Returns:
+        List[Dict[str, int]]: A list of accounts that have expired.
+    """
+    # Get the current epoch timestamp
+    current_timestamp = int(datetime.now().timestamp())
+
+    # Filter accounts where the current date is greater than the expiryDate
+    expired_accounts = [
+        account for account in accounts
+        if account['expiaryDate'] < current_timestamp
+    ]
+
+    return expired_accounts

+ 21 - 0
templates/home.html

@@ -58,6 +58,27 @@
             </tbody>
         </table>
     {% endif %}
+    {% if expired_accounts %}
+        <h3>Expired Accounts</h3>
+        <table class="table table-bordered table-striped">
+            <thead class="thead-dark">
+                <tr>
+                    <th>Stream Name</th>
+                    <th>Username</th>
+                    <th>Expiry Date</th>
+                </tr>
+            </thead>
+            <tbody>
+                {% for account in expired_accounts %}
+                    <tr>
+                        <td>{{ account.stream }}</td>
+                        <td>{{ account.username }}</td>
+                        <td>{{ account.expiaryDate_rendered }}</td>
+                    </tr>
+                {% endfor %}
+            </tbody>
+        </table>
+    {% endif %}    
 </div>