Diff between d04237b00d59d1a947ff70dd2c429a0dae57292b and 4da9f717e242c36df3bfbab41e6c7019917363ae

Changed Files

File Additions Deletions Status
app.py +2 -55 modified
filters.py +58 -0 added

Full Patch

diff --git a/app.py b/app.py
index 6b0b144..6391784 100644
--- a/app.py
+++ b/app.py
@@ -1,7 +1,6 @@
 import os
 import subprocess
 from flask import Flask, render_template, request, abort
-from datetime import datetime
 from dotenv import load_dotenv
 
 from git.repo import get_bare_repos
@@ -13,6 +12,7 @@ from git.misc import get_version, validate_repo_name, validate_ref, validate_ref
 from git.diff import get_diff
 from git.blame import get_blame
 from highlight import highlight_diff
+from filters import register_filters
 
 load_dotenv()
 
@@ -20,6 +20,7 @@ app = Flask(__name__)
 
 # for base.html
 app.jinja_env.globals['request'] = request
+register_filters(app)
 
 @app.context_processor
 def inject_current_ref():
@@ -36,60 +37,6 @@ def inject_current_ref():
 
 repo_path = os.getenv('GIT_REPO_PATH')
 
-def datetime_filter(value, format='%Y-%m-%d %H:%M:%S'):
-    if isinstance(value, datetime):
-        # format regular datetime 
-        return value.strftime(format)
-    elif isinstance(value, (int, float)):
-        # if not datetime, but number, try to convert
-        # just assume its unix timestamp, git uses that
-        dt = datetime.fromtimestamp(value)
-        return dt.strftime(format)
-    return value
-
-# age filter to show relative time like "2 days ago" 
-def age_filter(value):
-    if isinstance(value, (int, float)):
-        dt = datetime.fromtimestamp(value)
-    elif isinstance(value, datetime):
-        dt = value
-    else:
-        return value
-    now = datetime.now()
-    diff = now - dt
-    if diff.days > 365:
-        years = diff.days // 365
-        return f"{years} year{'s' if years != 1 else ''} ago"
-    elif diff.days > 30:
-        months = diff.days // 30
-        return f"{months} month{'s' if months != 1 else ''} ago"
-    elif diff.days > 0:
-        return f"{diff.days} day{'s' if diff.days != 1 else ''} ago"
-    elif diff.seconds > 3600:
-        hours = diff.seconds // 3600
-        return f"{hours} hour{'s' if hours != 1 else ''} ago"
-    elif diff.seconds > 60:
-        minutes = diff.seconds // 60
-        return f"{minutes} minute{'s' if minutes != 1 else ''} ago"
-    else:
-        return "just now"
-
-def size_filter(value):
-    if value is None:
-        return ''
-    if value < 1024:
-        return f"{value} B"
-    elif value < 1024 * 1024:
-        return f"{value / 1024:.1f} KB"
-    elif value < 1024 * 1024 * 1024:
-        return f"{value / (1024 * 1024):.1f} MB"
-    else:
-        return f"{value / (1024 * 1024 * 1024):.1f} GB"
-
-app.jinja_env.filters['datetime'] = datetime_filter
-app.jinja_env.filters['age'] = age_filter
-app.jinja_env.filters['size'] = size_filter
-
 @app.route("/")
 def index():
     repos = get_bare_repos(repo_path)
diff --git a/filters.py b/filters.py
new file mode 100644
index 0000000..9a68276
--- /dev/null
+++ b/filters.py
@@ -0,0 +1,58 @@
+from datetime import datetime
+
+
+# Filter to format datetime objects or timestamps as strings (2025-12-08 12:18:21 )
+def datetime_filter(value, format="%Y-%m-%d %H:%M:%S"):
+    if isinstance(value, datetime):
+        return value.strftime(format)
+    if isinstance(value, (int, float)):
+        dt = datetime.fromtimestamp(value)
+        return dt.strftime(format)
+    return value
+
+
+# Filter to display age in human-readable format (like "2 days ago", "3 hours ago")
+def age_filter(value):
+    if isinstance(value, (int, float)):
+        dt = datetime.fromtimestamp(value)
+    elif isinstance(value, datetime):
+        dt = value
+    else:
+        return value
+    now = datetime.now()
+    diff = now - dt
+    if diff.days > 365:
+        years = diff.days // 365
+        return f"{years} year{'s' if years != 1 else ''} ago"
+    if diff.days > 30:
+        months = diff.days // 30
+        return f"{months} month{'s' if months != 1 else ''} ago"
+    if diff.days > 0:
+        return f"{diff.days} day{'s' if diff.days != 1 else ''} ago"
+    if diff.seconds > 3600:
+        hours = diff.seconds // 3600
+        return f"{hours} hour{'s' if hours != 1 else ''} ago"
+    if diff.seconds > 60:
+        minutes = diff.seconds // 60
+        return f"{minutes} minute{'s' if minutes != 1 else ''} ago"
+    return "just now"
+
+
+# Filter to display file sizes in human-readable format (bytes to KB, MB, GB)
+def size_filter(value):
+    if value is None:
+        return ""
+    if value < 1024:
+        return f"{value} B"
+    if value < 1024 * 1024:
+        return f"{value / 1024:.1f} KB"
+    if value < 1024 * 1024 * 1024:
+        return f"{value / (1024 * 1024):.1f} MB"
+    return f"{value / (1024 * 1024 * 1024):.1f} GB"
+
+
+# Register filters with Flask app
+def register_filters(app):
+    app.jinja_env.filters["datetime"] = datetime_filter
+    app.jinja_env.filters["age"] = age_filter
+    app.jinja_env.filters["size"] = size_filter