This is an automated email from the ASF dual-hosted git repository.

sbp pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/tooling-atr-experiments.git


The following commit(s) were added to refs/heads/main by this push:
     new 071d704  Fix linting errors
071d704 is described below

commit 071d704d15e4d4b9c70a4d5a332d20e523ca94bf
Author: Sean B. Palmer <[email protected]>
AuthorDate: Mon Feb 17 14:17:39 2025 +0200

    Fix linting errors
---
 atr/server.py                          |   1 +
 atr/static/css/bootstrap.min.css       |   2 +-
 atr/static/css/fontawesome.all.min.css |   2 +-
 atr/static/js/bootstrap.bundle.min.js  |   2 +-
 atr/templates/includes/footer.html     |   2 +-
 atr/templates/includes/navigation.html |  78 +++++----
 atr/templates/index.html               |   6 +-
 atr/templates/layouts/base.html        |  38 +++--
 atr/templates/pages.html               | 300 +++++++++++++++++----------------
 atr/templates/pmc-directory.html       |  58 ++++---
 10 files changed, 265 insertions(+), 224 deletions(-)

diff --git a/atr/server.py b/atr/server.py
index 13988a9..c2a563f 100644
--- a/atr/server.py
+++ b/atr/server.py
@@ -21,6 +21,7 @@ import os
 
 import asfquart
 import asfquart.generics
+import asfquart.session
 from asfquart.base import QuartApp
 from sqlmodel import SQLModel
 from sqlalchemy.ext.asyncio import create_async_engine, AsyncSession, 
async_sessionmaker
diff --git a/atr/static/css/bootstrap.min.css b/atr/static/css/bootstrap.min.css
index 3993414..46dc7fa 100644
--- a/atr/static/css/bootstrap.min.css
+++ b/atr/static/css/bootstrap.min.css
@@ -3,4 +3,4 @@
  * Copyright 2011-2024 The Bootstrap Authors
  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
  
*/:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff;--bs-gray:#6c757d;--bs-gray-dark:#343a40;--bs-gray-100:#f8f9fa;--bs-gray-200:#e9ecef;--bs-gray-300:#dee2e6;--bs-gray-400:#ced4da;--bs-gray-500:#adb5bd;--bs-gray-600:#6c757d;--bs-gray-700:#495057;--bs-gray-800:#343a40;--bs-gray-900:#212529;--
 [...]
-/*# sourceMappingURL=bootstrap.min.css.map */
\ No newline at end of file
+/*# sourceMappingURL=bootstrap.min.css.map */
diff --git a/atr/static/css/fontawesome.all.min.css 
b/atr/static/css/fontawesome.all.min.css
index 29542ac..a660d56 100644
--- a/atr/static/css/fontawesome.all.min.css
+++ b/atr/static/css/fontawesome.all.min.css
@@ -6,4 +6,4 @@
 .fa{font-family:var(--fa-style-family,"Font Awesome 6 
Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-regular,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-brands:before,.fa-regular:before,.fa-solid:before,.fa:before,.fab:before,.far:before,.fas:before{content:var(--fa)}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font
 [...]
 
 
.fa-0{--fa:"\30"}.fa-1{--fa:"\31"}.fa-2{--fa:"\32"}.fa-3{--fa:"\33"}.fa-4{--fa:"\34"}.fa-5{--fa:"\35"}.fa-6{--fa:"\36"}.fa-7{--fa:"\37"}.fa-8{--fa:"\38"}.fa-9{--fa:"\39"}.fa-fill-drip{--fa:"\f576"}.fa-arrows-to-circle{--fa:"\e4bd"}.fa-chevron-circle-right,.fa-circle-chevron-right{--fa:"\f138"}.fa-at{--fa:"\40"}.fa-trash-alt,.fa-trash-can{--fa:"\f2ed"}.fa-text-height{--fa:"\f034"}.fa-user-times,.fa-user-xmark{--fa:"\f235"}.fa-stethoscope{--fa:"\f0f1"}.fa-comment-alt,.fa-message{--fa:"\f27
 [...]
-.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-style-family-brands:"Font
 Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 
Brands"}@font-face{font-family:"Font Awesome 6 
Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.woff2)
 format("woff2"), [...]
\ No newline at end of file
+.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-style-family-brands:"Font
 Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 
Brands"}@font-face{font-family:"Font Awesome 6 
Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.woff2)
 format("woff2"), [...]
diff --git a/atr/static/js/bootstrap.bundle.min.js 
b/atr/static/js/bootstrap.bundle.min.js
index 04e9185..d705b8d 100644
--- a/atr/static/js/bootstrap.bundle.min.js
+++ b/atr/static/js/bootstrap.bundle.min.js
@@ -4,4 +4,4 @@
   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
   */
 !function(t,e){"object"==typeof exports&&"undefined"!=typeof 
module?module.exports=e():"function"==typeof 
define&&define.amd?define(e):(t="undefined"!=typeof 
globalThis?globalThis:t||self).bootstrap=e()}(this,(function(){"use 
strict";const t=new Map,e={set(e,i,n){t.has(e)||t.set(e,new Map);const 
s=t.get(e);s.has(i)||0===s.size?s.set(i,n):console.error(`Bootstrap doesn't 
allow more than one instance per element. Bound instance: 
${Array.from(s.keys())[0]}.`)},get:(e,i)=>t.has(e)&&t.get(e). [...]
-//# sourceMappingURL=bootstrap.bundle.min.js.map
\ No newline at end of file
+//# sourceMappingURL=bootstrap.bundle.min.js.map
diff --git a/atr/templates/includes/footer.html 
b/atr/templates/includes/footer.html
index 3dc104f..38535c7 100644
--- a/atr/templates/includes/footer.html
+++ b/atr/templates/includes/footer.html
@@ -1,5 +1,5 @@
 <footer class="footer mt-auto py-3">
   <div class="container">
-    <span class="text-muted">Copyright&copy; 2025, The Apache Software 
Foundation. Material licensed under the <a 
href="https://www.apache.org/licenses/LICENSE-2.0";>Apache License, version 
2.0</a>. For inquiries, contact [email protected]</span>
+    <span class="text-muted">Copyright © 2025, The Apache Software Foundation. 
Material licensed under the <a 
href="https://www.apache.org/licenses/LICENSE-2.0";>Apache License, version 
2.0</a>. For inquiries, contact [email protected]</span>
   </div>
 </footer>
diff --git a/atr/templates/includes/navigation.html 
b/atr/templates/includes/navigation.html
index dfc0c62..f5c2b83 100644
--- a/atr/templates/includes/navigation.html
+++ b/atr/templates/includes/navigation.html
@@ -1,36 +1,56 @@
 <nav class="navbar navbar-expand-lg navbar-dark bg-dark">
-<div class="container-fluid">
-  <a class="navbar-brand" href="#"><img src="{{ url_for('static', 
filename='images/feather_small.png') }}" style="height: 32px;"/>Apache Trusted 
Release Platform</a>
-  <div class="collapse navbar-collapse" id="navbarATR">
-    <ul class="navbar-nav me-auto mb-2 mb-lg-0">
-      <li class="nav-item">
-        <a class="nav-link active" aria-current="page" href="/">Home</a>
-      </li>
-      <li class="nav-item">
-        <a class="nav-link" href="/pages">Pages</a>
-      </li>
-      <li class="nav-item dropdown">
-        <a class="nav-link dropdown-toggle" href="#" data-bs-toggle="dropdown" 
aria-expanded="false">PMCs</a>
-        <ul class="dropdown-menu">
-          <li><a class="dropdown-item" href="/pmc/directory">Directory</a></li>
-        </ul>
-      </li>
-    </ul>
-
-    <ul class="navbar-nav ml-auto">
-      <li class="nav-item dropdown">
-        {% if current_user %}
-          <a class="nav-link dropdown-toggle" href="#" 
data-bs-toggle="dropdown" aria-expanded="false">{{ current_user.uid }} - {{ 
current_user.fullname }}</a>
+  <div class="container-fluid">
+    <a class="navbar-brand" href="#">
+      <img src="{{ url_for('static', filename='images/feather_small.png') }}"
+           alt="Apache Feather Logo"
+           class="navbar-logo" />
+    Apache Trusted Release Platform</a>
+    <div class="collapse navbar-collapse" id="navbarATR">
+      <ul class="navbar-nav me-auto mb-2 mb-lg-0">
+        <li class="nav-item">
+          <a class="nav-link active"
+             aria-current="page"
+             href="{{ url_for('root') }}">Home</a>
+        </li>
+        <li class="nav-item">
+          <a class="nav-link" href="{{ url_for('root_pages') }}">Pages</a>
+        </li>
+        <li class="nav-item dropdown">
+          <a class="nav-link dropdown-toggle"
+             href="#"
+             data-bs-toggle="dropdown"
+             aria-expanded="false">PMCs</a>
           <ul class="dropdown-menu">
             <li>
-              <a class="dropdown-item" href="#" 
onclick="location.href='/auth?logout=' + window.location.pathname;">Logout</a>
+              <a class="dropdown-item" href="{{ url_for('root_pmc_directory') 
}}">Directory</a>
             </li>
           </ul>
-        {% else %}
-        <button class="btn btn-outline-light me-2" type="button" 
onclick="location.href='/auth?login=' + window.location.pathname;"><i 
class="fas fa-user"></i> Login</button>
-        {% endif %}
-      </li>
-    </ul>
+        </li>
+      </ul>
+
+      <ul class="navbar-nav ml-auto">
+        <li class="nav-item dropdown">
+          {% if current_user %}
+            <a class="nav-link dropdown-toggle"
+               href="#"
+               data-bs-toggle="dropdown"
+               aria-expanded="false">{{ current_user.uid }} - {{ 
current_user.fullname }}</a>
+            <ul class="dropdown-menu">
+              <li>
+                <a class="dropdown-item"
+                   href="#"
+                   onclick="location.href='/auth?logout=' + 
window.location.pathname;">Logout</a>
+              </li>
+            </ul>
+          {% else %}
+            <button class="btn btn-outline-light me-2"
+                    type="button"
+                    onclick="location.href='/auth?login=' + 
window.location.pathname;">
+              <i class="fas fa-user"></i> Login
+            </button>
+          {% endif %}
+        </li>
+      </ul>
+    </div>
   </div>
-</div>
 </nav>
diff --git a/atr/templates/index.html b/atr/templates/index.html
index aca8b75..f78df3c 100644
--- a/atr/templates/index.html
+++ b/atr/templates/index.html
@@ -1,7 +1,9 @@
 {% extends "layouts/base.html" %}
 
-{% block title %}Apache Trusted Release Platform{% endblock %}
+{% block title %}
+  Apache Trusted Release Platform
+{% endblock title %}
 
 {% block content %}
-<h1>Apache Trusted Releases</h1>
+  <h1>Apache Trusted Releases</h1>
 {% endblock content %}
diff --git a/atr/templates/layouts/base.html b/atr/templates/layouts/base.html
index cbf5f52..7805157 100644
--- a/atr/templates/layouts/base.html
+++ b/atr/templates/layouts/base.html
@@ -3,25 +3,35 @@
   <head>
     <meta charset="utf-8" />
     <meta name="viewport" content="width=device-width,initial-scale=1.0" />
-    <meta name="description" content="{% block description %}{% endblock %}" />
-    <title>{% block title %}{% endblock %}</title>
+    <meta name="description"
+          content="{%- block description -%}{%- endblock description -%}" />
+    <title>
+      {% block title %}
+      {% endblock title %}
+    </title>
     {% block stylesheets %}
-    <link rel="stylesheet" href="{{ url_for('static', 
filename='css/bootstrap.min.css') }}" />
-    <link rel="stylesheet" href="{{ url_for('static', 
filename='css/fontawesome.all.min.css') }}" />
-    <link rel="stylesheet" href="{{ url_for('static', filename='css/root.css') 
}}" />
+      <link rel="stylesheet"
+            href="{{ url_for('static', filename='css/bootstrap.min.css') }}" />
+      <link rel="stylesheet"
+            href="{{ url_for('static', filename='css/fontawesome.all.min.css') 
}}" />
+      <link rel="stylesheet"
+            href="{{ url_for('static', filename='css/root.css') }}" />
     {% endblock stylesheets %}
   </head>
-  <body class="{% block body_class %}{% endblock body_class %}">
-  <div class="wrapper">
-    {% include 'includes/navigation.html' %}
-    {% block content %}{% endblock content %}
-    {% include 'includes/footer.html' %}
-  </div>
+  <body class="{%- block body_class -%}{%- endblock body_class -%}">
+    <div class="wrapper">
+      {% include "includes/navigation.html" %}
 
-  {% block javascripts %}
-  <script src="{{ url_for('static', filename='js/bootstrap.bundle.min.js') 
}}"></script>
+      {% block content %}
+      {% endblock content %}
+      {% include "includes/footer.html" %}
 
-  {% endblock javascripts %}
+    </div>
+
+    {% block javascripts %}
+      <script src="{{ url_for('static', filename='js/bootstrap.bundle.min.js') 
}}"></script>
+
+    {% endblock javascripts %}
 
   </body>
 </html>
diff --git a/atr/templates/pages.html b/atr/templates/pages.html
index f7ced7f..c684377 100644
--- a/atr/templates/pages.html
+++ b/atr/templates/pages.html
@@ -1,7 +1,11 @@
 {% extends "layouts/base.html" %}
 
-{% block title %} ATR | Pages {% endblock %}
-{% block description %}List of all pages and endpoints in ATR.{% endblock %}
+{% block title %}
+  ATR | Pages
+{% endblock title %}
+{% block description %}
+  List of all pages and endpoints in ATR.
+{% endblock description %}
 
 {% block stylesheets %}
   {{ super() }}
@@ -68,187 +72,187 @@
 {% endblock stylesheets %}
 
 {% block content %}
-<h1>ATR Pages</h1>
-<p class="intro">A complete list of all pages and endpoints available in 
ATR.</p>
-
-<div class="endpoint-list">
-  <div class="endpoint-group">
-    <h2>Main Pages</h2>
-
-    <div class="endpoint">
-      <h3>
-        <a href="{{ url_for('root') }}">/</a>
-      </h3>
-      <div class="endpoint-description">Simple welcome page with Apache 
Trusted Releases title.</div>
-      <div class="endpoint-meta">
-        Access: <span class="access-requirement public">Public</span>
+  <h1>ATR Pages</h1>
+  <p class="intro">A complete list of all pages and endpoints available in 
ATR.</p>
+
+  <div class="endpoint-list">
+    <div class="endpoint-group">
+      <h2>Main Pages</h2>
+
+      <div class="endpoint">
+        <h3>
+          <a href="{{ url_for('root') }}">/</a>
+        </h3>
+        <div class="endpoint-description">Simple welcome page with Apache 
Trusted Releases title.</div>
+        <div class="endpoint-meta">
+          Access: <span class="access-requirement public">Public</span>
+        </div>
       </div>
-    </div>
 
-    <div class="endpoint">
-      <h3>
-        <a href="{{ url_for('root_pages') }}">/pages</a>
-      </h3>
-      <div class="endpoint-description">List of all pages on the website (this 
page).</div>
-      <div class="endpoint-meta">
-        Access: <span class="access-requirement public">Public</span>
+      <div class="endpoint">
+        <h3>
+          <a href="{{ url_for('root_pages') }}">/pages</a>
+        </h3>
+        <div class="endpoint-description">List of all pages on the website 
(this page).</div>
+        <div class="endpoint-meta">
+          Access: <span class="access-requirement public">Public</span>
+        </div>
       </div>
     </div>
-  </div>
-
-  <div class="endpoint-group">
-    <h2>PMC Management</h2>
 
-    <div class="endpoint">
-      <h3>
-        <a href="{{ url_for('root_pmc_directory') }}">/pmc/directory</a>
-      </h3>
-      <div class="endpoint-description">Main PMC directory page with all PMCs 
and their latest releases.</div>
-      <div class="endpoint-meta">
-        Access: <span class="access-requirement public">Public</span>
+    <div class="endpoint-group">
+      <h2>PMC Management</h2>
+
+      <div class="endpoint">
+        <h3>
+          <a href="{{ url_for('root_pmc_directory') }}">/pmc/directory</a>
+        </h3>
+        <div class="endpoint-description">Main PMC directory page with all 
PMCs and their latest releases.</div>
+        <div class="endpoint-meta">
+          Access: <span class="access-requirement public">Public</span>
+        </div>
       </div>
-    </div>
 
-    <div class="endpoint">
-      <h3>
-        <a href="{{ url_for('root_pmc_list') }}">/pmc/list</a>
-      </h3>
-      <div class="endpoint-description">List all PMCs in the database (JSON 
format).</div>
-      <div class="endpoint-meta">
-        Access: <span class="access-requirement public">Public</span>
+      <div class="endpoint">
+        <h3>
+          <a href="{{ url_for('root_pmc_list') }}">/pmc/list</a>
+        </h3>
+        <div class="endpoint-description">List all PMCs in the database (JSON 
format).</div>
+        <div class="endpoint-meta">
+          Access: <span class="access-requirement public">Public</span>
+        </div>
       </div>
-    </div>
 
-    <div class="endpoint">
-      <h3>/pmc/&lt;project_name&gt;</h3>
-      <div class="endpoint-description">Get details for a specific PMC (JSON 
format).</div>
-      <div class="endpoint-meta">
-        Access: <span class="access-requirement public">Public</span>
+      <div class="endpoint">
+        <h3>/pmc/&lt;project_name&gt;</h3>
+        <div class="endpoint-description">Get details for a specific PMC (JSON 
format).</div>
+        <div class="endpoint-meta">
+          Access: <span class="access-requirement public">Public</span>
+        </div>
       </div>
-    </div>
 
-    <div class="endpoint">
-      <h3>/pmc/create/&lt;project_name&gt;</h3>
-      <div class="endpoint-description">Create a new PMC with sample data 
(JSON format).</div>
-      <div class="endpoint-meta">
-        Access: <span class="access-requirement public">Public</span>
+      <div class="endpoint">
+        <h3>/pmc/create/&lt;project_name&gt;</h3>
+        <div class="endpoint-description">Create a new PMC with sample data 
(JSON format).</div>
+        <div class="endpoint-meta">
+          Access: <span class="access-requirement public">Public</span>
+        </div>
       </div>
     </div>
-  </div>
 
-  <div class="endpoint-group">
-    <h2>Release Management</h2>
-
-    <div class="endpoint">
-      <h3>
-        <a href="{{ url_for('root_add_release_candidate') 
}}">/add-release-candidate</a>
-      </h3>
-      <div class="endpoint-description">Add a release candidate to the 
database.</div>
-      <div class="endpoint-meta">
-        Access: <span class="access-requirement committer">Committer</span>
-        <br />
-        Additional requirement: Must be PMC member of the target project
+    <div class="endpoint-group">
+      <h2>Release Management</h2>
+
+      <div class="endpoint">
+        <h3>
+          <a href="{{ url_for('root_add_release_candidate') 
}}">/add-release-candidate</a>
+        </h3>
+        <div class="endpoint-description">Add a release candidate to the 
database.</div>
+        <div class="endpoint-meta">
+          Access: <span class="access-requirement committer">Committer</span>
+          <br />
+          Additional requirement: Must be PMC member of the target project
+        </div>
       </div>
-    </div>
 
-    <div class="endpoint">
-      <h3>
-        <a href="{{ url_for('root_user_uploads') }}">/user/uploads</a>
-      </h3>
-      <div class="endpoint-description">Show all release candidates uploaded 
by the current user.</div>
-      <div class="endpoint-meta">
-        Access: <span class="access-requirement committer">Committer</span>
+      <div class="endpoint">
+        <h3>
+          <a href="{{ url_for('root_user_uploads') }}">/user/uploads</a>
+        </h3>
+        <div class="endpoint-description">Show all release candidates uploaded 
by the current user.</div>
+        <div class="endpoint-meta">
+          Access: <span class="access-requirement committer">Committer</span>
+        </div>
       </div>
-    </div>
 
-    <div class="endpoint">
-      <h3>/release/signatures/verify/&lt;release_key&gt;</h3>
-      <div class="endpoint-description">Verify GPG signatures for all packages 
in a release candidate.</div>
-      <div class="endpoint-meta">
-        Access: <span class="access-requirement committer">Committer</span>
+      <div class="endpoint">
+        <h3>/release/signatures/verify/&lt;release_key&gt;</h3>
+        <div class="endpoint-description">Verify GPG signatures for all 
packages in a release candidate.</div>
+        <div class="endpoint-meta">
+          Access: <span class="access-requirement committer">Committer</span>
+        </div>
       </div>
     </div>
-  </div>
-
-  <div class="endpoint-group">
-    <h2>User Management</h2>
 
-    <div class="endpoint">
-      <h3>
-        <a href="{{ url_for('root_user_keys_add') }}">/user/keys/add</a>
-      </h3>
-      <div class="endpoint-description">Add a GPG public key to your account 
for signing releases.</div>
-      <div class="endpoint-meta">
-        Access: <span class="access-requirement committer">Committer</span>
+    <div class="endpoint-group">
+      <h2>User Management</h2>
+
+      <div class="endpoint">
+        <h3>
+          <a href="{{ url_for('root_user_keys_add') }}">/user/keys/add</a>
+        </h3>
+        <div class="endpoint-description">Add a GPG public key to your account 
for signing releases.</div>
+        <div class="endpoint-meta">
+          Access: <span class="access-requirement committer">Committer</span>
+        </div>
       </div>
-    </div>
 
-    <div class="endpoint">
-      <h3>
-        <a href="{{ url_for('root_user_keys_delete') }}">/user/keys/delete</a>
-      </h3>
-      <div class="endpoint-description">Debug endpoint to delete all GPG keys 
associated with your account.</div>
-      <div class="endpoint-meta">
-        Access: <span class="access-requirement committer">Committer</span>
-        <br />
-        <span class="access-requirement warning">Warning: This is a debug 
endpoint that immediately deletes all your keys without confirmation!</span>
+      <div class="endpoint">
+        <h3>
+          <a href="{{ url_for('root_user_keys_delete') 
}}">/user/keys/delete</a>
+        </h3>
+        <div class="endpoint-description">Debug endpoint to delete all GPG 
keys associated with your account.</div>
+        <div class="endpoint-meta">
+          Access: <span class="access-requirement committer">Committer</span>
+          <br />
+          <span class="access-requirement warning">Warning: This is a debug 
endpoint that immediately deletes all your keys without confirmation!</span>
+        </div>
       </div>
     </div>
-  </div>
 
-  <div class="endpoint-group">
-    <h2>Administration</h2>
-
-    <div class="endpoint">
-      <h3>
-        <a href="{{ url_for('root_admin_database') }}">/admin/database</a>
-      </h3>
-      <div class="endpoint-description">Browse all records in the 
database.</div>
-      <div class="endpoint-meta">
-        Access: <span class="access-requirement committer">Committer</span>
-        <span class="access-requirement admin">Admin</span>
-        <br />
-        Additional requirement: Must be in ALLOWED_USERS list
+    <div class="endpoint-group">
+      <h2>Administration</h2>
+
+      <div class="endpoint">
+        <h3>
+          <a href="{{ url_for('root_admin_database') }}">/admin/database</a>
+        </h3>
+        <div class="endpoint-description">Browse all records in the 
database.</div>
+        <div class="endpoint-meta">
+          Access: <span class="access-requirement committer">Committer</span>
+          <span class="access-requirement admin">Admin</span>
+          <br />
+          Additional requirement: Must be in ALLOWED_USERS list
+        </div>
       </div>
-    </div>
 
-    <div class="endpoint">
-      <h3>
-        <a href="{{ url_for('root_admin_update_pmcs') 
}}">/admin/update-pmcs</a>
-      </h3>
-      <div class="endpoint-description">Update PMCs from remote, authoritative 
committee-info.json.</div>
-      <div class="endpoint-meta">
-        Access: <span class="access-requirement committer">Committer</span>
-        <span class="access-requirement admin">Admin</span>
-        <br />
-        Additional requirement: Must be in ALLOWED_USERS list
+      <div class="endpoint">
+        <h3>
+          <a href="{{ url_for('root_admin_update_pmcs') 
}}">/admin/update-pmcs</a>
+        </h3>
+        <div class="endpoint-description">Update PMCs from remote, 
authoritative committee-info.json.</div>
+        <div class="endpoint-meta">
+          Access: <span class="access-requirement committer">Committer</span>
+          <span class="access-requirement admin">Admin</span>
+          <br />
+          Additional requirement: Must be in ALLOWED_USERS list
+        </div>
       </div>
     </div>
-  </div>
 
-  <div class="endpoint-group">
-    <h2>Debug/Testing</h2>
-
-    <div class="endpoint">
-      <h3>
-        <a href="{{ url_for('root_secret') }}">/secret</a>
-      </h3>
-      <div class="endpoint-description">Test endpoint for authentication.</div>
-      <div class="endpoint-meta">
-        Access: <span class="access-requirement committer">Committer</span>
+    <div class="endpoint-group">
+      <h2>Debug/Testing</h2>
+
+      <div class="endpoint">
+        <h3>
+          <a href="{{ url_for('root_secret') }}">/secret</a>
+        </h3>
+        <div class="endpoint-description">Test endpoint for 
authentication.</div>
+        <div class="endpoint-meta">
+          Access: <span class="access-requirement committer">Committer</span>
+        </div>
       </div>
-    </div>
 
-    <div class="endpoint">
-      <h3>
-        <a href="{{ url_for('root_database_debug') }}">/database/debug</a>
-      </h3>
-      <div class="endpoint-description">Debug information about the 
database.</div>
-      <div class="endpoint-meta">
-        Access: <span class="access-requirement public">Public</span>
+      <div class="endpoint">
+        <h3>
+          <a href="{{ url_for('root_database_debug') }}">/database/debug</a>
+        </h3>
+        <div class="endpoint-description">Debug information about the 
database.</div>
+        <div class="endpoint-meta">
+          Access: <span class="access-requirement public">Public</span>
+        </div>
       </div>
     </div>
   </div>
-</div>
 
 {% endblock content %}
diff --git a/atr/templates/pmc-directory.html b/atr/templates/pmc-directory.html
index 5544d84..14c6587 100644
--- a/atr/templates/pmc-directory.html
+++ b/atr/templates/pmc-directory.html
@@ -1,33 +1,37 @@
 {% extends "layouts/base.html" %}
 
-{% block title %} Apache Trusted Releases | PMC Directory {% endblock %}
-{% block description %}Directory of all PMCs{% endblock %}
+{% block title %}
+  ATR | PMC Directory
+{% endblock title %}
+{% block description %}
+  List of all PMCs and their latest releases.
+{% endblock description %}
 
 {% block content %}
- <h1>Directory of PMCs</h1>
-<p class="intro">
-  Welcome to the Apache Trusted Release platform. Below are the current Apache 
PMCs and their releases:
-</p>
+  <h1>Directory of PMCs</h1>
+  <p class="intro">
+    Welcome to the Apache Trusted Release platform. Below are the current 
Apache PMCs and their releases:
+  </p>
 
-<ul class="pmc-list">
-  {% for pmc in pmcs %}
-  <li class="pmc-item">
-    <div class="pmc-name">{{ pmc.project_name }}</div>
-    <div class="pmc-stats">
-      <span class="stat-item">
-        <span>PMC Members:</span>
-        <strong>{{ pmc.pmc_members|length }}</strong>
-      </span>
-      <span class="stat-item">
-        <span>Committers:</span>
-        <strong>{{ pmc.committers|length }}</strong>
-      </span>
-      <span class="stat-item">
-        <span>Release Managers:</span>
-        <strong>{{ pmc.release_managers|length }}</strong>
-      </span>
-    </div>
-  </li>
-  {% endfor %}
-</ul>
+  <ul class="pmc-list">
+    {% for pmc in pmcs %}
+      <li class="pmc-item">
+        <div class="pmc-name">{{ pmc.project_name }}</div>
+        <div class="pmc-stats">
+          <span class="stat-item">
+            <span>PMC Members:</span>
+            <strong>{{ pmc.pmc_members|length }}</strong>
+          </span>
+          <span class="stat-item">
+            <span>Committers:</span>
+            <strong>{{ pmc.committers|length }}</strong>
+          </span>
+          <span class="stat-item">
+            <span>Release Managers:</span>
+            <strong>{{ pmc.release_managers|length }}</strong>
+          </span>
+        </div>
+      </li>
+    {% endfor %}
+  </ul>
 {% endblock content %}


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to