Added ChannelPlugin menu for debugging
This commit is contained in:
		
							parent
							
								
									be4cac6b24
								
							
						
					
					
						commit
						1e4ac60365
					
				
					 4 changed files with 87 additions and 33 deletions
				
			
		|  | @ -1,24 +1,21 @@ | ||||||
| import json |  | ||||||
| import os.path | import os.path | ||||||
| from functools import wraps | from functools import wraps | ||||||
| 
 | 
 | ||||||
| import structlog | import structlog | ||||||
| from flask import ( | from flask import ( | ||||||
|     Blueprint, |     Blueprint, | ||||||
|     render_template, |     g, | ||||||
|  |     flash, | ||||||
|     request, |     request, | ||||||
|     session, |     session, | ||||||
|     redirect, |  | ||||||
|     url_for, |     url_for, | ||||||
|     flash, |     redirect, | ||||||
|     g, |     render_template, | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
| from butterrobot.config import HOSTNAME |  | ||||||
| from butterrobot.db import UserQuery, ChannelQuery, ChannelPluginQuery | from butterrobot.db import UserQuery, ChannelQuery, ChannelPluginQuery | ||||||
| from butterrobot.plugins import get_available_plugins | from butterrobot.plugins import get_available_plugins | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| admin = Blueprint("admin", __name__, url_prefix="/admin") | admin = Blueprint("admin", __name__, url_prefix="/admin") | ||||||
| admin.template_folder = os.path.join(os.path.dirname(__name__), "templates") | admin.template_folder = os.path.join(os.path.dirname(__name__), "templates") | ||||||
| logger = structlog.get_logger(__name__) | logger = structlog.get_logger(__name__) | ||||||
|  | @ -99,7 +96,8 @@ def channel_list_view(): | ||||||
| def channel_detail_view(channel_id): | def channel_detail_view(channel_id): | ||||||
|     if request.method == "POST": |     if request.method == "POST": | ||||||
|         ChannelQuery.update( |         ChannelQuery.update( | ||||||
|             channel_id, enabled=request.form["enabled"] == "true", |             channel_id, | ||||||
|  |             enabled=request.form["enabled"] == "true", | ||||||
|         ) |         ) | ||||||
|         flash("Channel updated", "success") |         flash("Channel updated", "success") | ||||||
| 
 | 
 | ||||||
|  | @ -117,18 +115,24 @@ def channel_delete_view(channel_id): | ||||||
|     return redirect(url_for("admin.channel_list_view")) |     return redirect(url_for("admin.channel_list_view")) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @admin.route("/channelplugins", methods=["POST"]) | @admin.route("/channelplugins", methods=["GET", "POST"]) | ||||||
| @login_required | @login_required | ||||||
| def channel_plugin_list_view(): | def channel_plugin_list_view(): | ||||||
|     data = request.form |     if request.method == "POST": | ||||||
|     try: |         data = request.form | ||||||
|         ChannelPluginQuery.create( |         try: | ||||||
|             data["channel_id"], data["plugin_id"], enabled=data["enabled"] == "y" |             ChannelPluginQuery.create( | ||||||
|         ) |                 data["channel_id"], data["plugin_id"], enabled=data["enabled"] == "y" | ||||||
|         flash(f"Plugin {data['plugin_id']} added to the channel", "success") |             ) | ||||||
|     except ChannelPluginQuery.Duplicated: |             flash(f"Plugin {data['plugin_id']} added to the channel", "success") | ||||||
|         flash(f"Plugin {data['plugin_id']} is already present on the channel", "error") |         except ChannelPluginQuery.Duplicated: | ||||||
|     return redirect(request.headers.get("Referer")) |             flash( | ||||||
|  |                 f"Plugin {data['plugin_id']} is already present on the channel", "error" | ||||||
|  |             ) | ||||||
|  |         return redirect(request.headers.get("Referer")) | ||||||
|  | 
 | ||||||
|  |     channel_plugins = ChannelPluginQuery.all() | ||||||
|  |     return render_template("channel_plugins_list.j2", channel_plugins=channel_plugins) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @admin.route("/channelplugins/<channel_plugin_id>", methods=["GET", "POST"]) | @admin.route("/channelplugins/<channel_plugin_id>", methods=["GET", "POST"]) | ||||||
|  | @ -136,7 +140,8 @@ def channel_plugin_list_view(): | ||||||
| def channel_plugin_detail_view(channel_plugin_id): | def channel_plugin_detail_view(channel_plugin_id): | ||||||
|     if request.method == "POST": |     if request.method == "POST": | ||||||
|         ChannelPluginQuery.update( |         ChannelPluginQuery.update( | ||||||
|             channel_plugin_id, enabled=request.form["enabled"] == "true", |             channel_plugin_id, | ||||||
|  |             enabled=request.form["enabled"] == "true", | ||||||
|         ) |         ) | ||||||
|         flash("Plugin updated", category="success") |         flash("Plugin updated", category="success") | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -43,7 +43,7 @@ | ||||||
|                     <div class="navbar navbar-light"> |                     <div class="navbar navbar-light"> | ||||||
|                         <div class="container-xl"> |                         <div class="container-xl"> | ||||||
|                             <ul class="navbar-nav"> |                             <ul class="navbar-nav"> | ||||||
|                                 <li class="nav-item {% if 'channels' in request.url %}active{% endif %}"> |                                 <li class="nav-item {% if '/channels' in request.url %}active{% endif %}"> | ||||||
|                                     <a class="nav-link" href="{{ url_for('admin.channel_list_view') }}"> |                                     <a class="nav-link" href="{{ url_for('admin.channel_list_view') }}"> | ||||||
|                                         <span class="nav-link-icon d-md-none d-lg-inline-block"> |                                         <span class="nav-link-icon d-md-none d-lg-inline-block"> | ||||||
|                                             <svg xmlns="http://www.w3.org/2000/svg" class="icon" width="24" height="24" |                                             <svg xmlns="http://www.w3.org/2000/svg" class="icon" width="24" height="24" | ||||||
|  | @ -60,7 +60,7 @@ | ||||||
|                                         </span> |                                         </span> | ||||||
|                                     </a> |                                     </a> | ||||||
|                                 </li> |                                 </li> | ||||||
|                                 <li class="nav-item {% if 'plugins' in request.url %}active{% endif %}"> |                                 <li class="nav-item {% if '/plugins' in request.url %}active{% endif %}"> | ||||||
|                                     <a class="nav-link" href="{{ url_for('admin.plugin_list_view') }}"> |                                     <a class="nav-link" href="{{ url_for('admin.plugin_list_view') }}"> | ||||||
|                                         <span class="nav-link-icon d-md-none d-lg-inline-block"> |                                         <span class="nav-link-icon d-md-none d-lg-inline-block"> | ||||||
|                                             <svg xmlns="http://www.w3.org/2000/svg" class="icon" width="24" height="24" |                                             <svg xmlns="http://www.w3.org/2000/svg" class="icon" width="24" height="24" | ||||||
|  | @ -76,6 +76,22 @@ | ||||||
|                                         </span> |                                         </span> | ||||||
|                                     </a> |                                     </a> | ||||||
|                                 </li> |                                 </li> | ||||||
|  |                                 <li class="nav-item {% if '/channelplugins' in request.url %}active{% endif %}"> | ||||||
|  |                                    <a class="nav-link" href="{{ url_for('admin.channel_plugin_list_view') }}"> | ||||||
|  |                                         <span class="nav-link-icon d-md-none d-lg-inline-block"> | ||||||
|  |                                             <svg xmlns="http://www.w3.org/2000/svg" class="icon" width="24" height="24" | ||||||
|  |                                                 viewBox="0 0 24 24" stroke-width="2" stroke="currentColor" fill="none" | ||||||
|  |                                                 stroke-linecap="round" stroke-linejoin="round"> | ||||||
|  |                                                 <path stroke="none" d="M0 0h24v24H0z" fill="none" /> | ||||||
|  |                                                 <path | ||||||
|  |                                                     d="M4 7h3a1 1 0 0 0 1 -1v-1a2 2 0 0 1 4 0v1a1 1 0 0 0 1 1h3a1 1 0 0 1 1 1v3a1 1 0 0 0 1 1h1a2 2 0 0 1 0 4h-1a1 1 0 0 0 -1 1v3a1 1 0 0 1 -1 1h-3a1 1 0 0 1 -1 -1v-1a2 2 0 0 0 -4 0v1a1 1 0 0 1 -1 1h-3a1 1 0 0 1 -1 -1v-3a1 1 0 0 1 1 -1h1a2 2 0 0 0 0 -4h-1a1 1 0 0 1 -1 -1v-3a1 1 0 0 1 1 -1" /> | ||||||
|  |                                             </svg> | ||||||
|  |                                         </span> | ||||||
|  |                                         <span class="nav-link-title"> | ||||||
|  |                                             Channel Plugins | ||||||
|  |                                         </span> | ||||||
|  |                                     </a> | ||||||
|  |                                 </li> | ||||||
|                             </ul> |                             </ul> | ||||||
|                         </div> |                         </div> | ||||||
|                     </div> |                     </div> | ||||||
|  |  | ||||||
							
								
								
									
										41
									
								
								butterrobot/admin/templates/channel_plugins_list.j2
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								butterrobot/admin/templates/channel_plugins_list.j2
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,41 @@ | ||||||
|  | {% extends "_base.j2" %} | ||||||
|  | 
 | ||||||
|  | {% block content %} | ||||||
|  | <div class="page-header d-print-none"> | ||||||
|  |     <div class="row align-items-center"> | ||||||
|  |         <div class="col"> | ||||||
|  |             <h2 class="page-title"> | ||||||
|  |                 Channel list | ||||||
|  |             </h2> | ||||||
|  |         </div> | ||||||
|  |     </div> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  | <div class="row"> | ||||||
|  |     <div class="table-responsive"> | ||||||
|  |         <table class="table table-vcenter card-table"> | ||||||
|  |             <thead> | ||||||
|  |                 <tr> | ||||||
|  |                     <th>ID</th> | ||||||
|  |                     <th>Channel ID</th> | ||||||
|  |                     <th>Plugin ID</th> | ||||||
|  |                     <th>Enabled</th> | ||||||
|  |                 </tr> | ||||||
|  |             </thead> | ||||||
|  | 
 | ||||||
|  |             <tbody> | ||||||
|  |                 {% for channel_plugin in channel_plugins %} | ||||||
|  |                 <tr> | ||||||
|  |                     <td>{{ channel_plugin.id }}</td> | ||||||
|  |                     <td>{{ channel_plugin.channel_id }}</td> | ||||||
|  |                     <td class="text-muted"> | ||||||
|  |                         {{ channel_plugin.plugin_id }} | ||||||
|  |                     </td> | ||||||
|  |                     <td class="text-muted">{{ channel_plugin.enabled }}</td> | ||||||
|  |                 </tr> | ||||||
|  |                 {% endfor %} | ||||||
|  |             </tbody> | ||||||
|  |         </table> | ||||||
|  |     </div> | ||||||
|  | </div> | ||||||
|  | {% endblock %} | ||||||
|  | @ -1,23 +1,15 @@ | ||||||
| import asyncio | import asyncio | ||||||
| import traceback |  | ||||||
| from dataclasses import asdict |  | ||||||
| from functools import lru_cache |  | ||||||
| 
 | 
 | ||||||
| from flask import Flask, request, jsonify |  | ||||||
| import structlog | import structlog | ||||||
|  | from flask import Flask, request | ||||||
| 
 | 
 | ||||||
| import butterrobot.logging  # noqa | import butterrobot.logging  # noqa | ||||||
| from butterrobot.queue import q |  | ||||||
| from butterrobot.db import ChannelQuery |  | ||||||
| from butterrobot.config import SECRET_KEY, HOSTNAME |  | ||||||
| from butterrobot.objects import Message, Channel |  | ||||||
| from butterrobot.http import ExternalProxyFix | from butterrobot.http import ExternalProxyFix | ||||||
| from butterrobot.plugins import get_available_plugins | from butterrobot.queue import q | ||||||
| from butterrobot.platforms import PLATFORMS, get_available_platforms | from butterrobot.config import SECRET_KEY | ||||||
| from butterrobot.platforms.base import Platform | from butterrobot.platforms import get_available_platforms | ||||||
| from butterrobot.admin.blueprint import admin as admin_bp | from butterrobot.admin.blueprint import admin as admin_bp | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| loop = asyncio.get_event_loop() | loop = asyncio.get_event_loop() | ||||||
| logger = structlog.get_logger(__name__) | logger = structlog.get_logger(__name__) | ||||||
| app = Flask(__name__) | app = Flask(__name__) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue