def check_result_table(): gs = GlobalSettings() res = gs.settings.update_check_result if not res: return {"error": "no_result"} if "error" in res: return res table = [] table.append( ( "pretalx", pretalx_version, res["version"]["latest"], res["version"]["updatable"], ) ) for p in get_all_plugins(): if p.module in res["plugins"]: pdata = res["plugins"][p.module] table.append( ( _("Plugin: {}").format(p.name), p.version, pdata["latest"], pdata["updatable"], ) ) else: table.append((_("Plugin: {}").format(p.name), p.version, "?", False)) return table
def post(self, request, *args, **kwargs): plugins_available = { p.module for p in get_all_plugins(self.request.event) if not p.name.startswith(".") and getattr(p, "visible", True) } with transaction.atomic(): for key, value in request.POST.items(): if key.startswith("plugin:"): module = key.split(":", maxsplit=1)[1] if value == "enable" and module in plugins_available: self.request.event.enable_plugin(module) self.request.event.log_action( "pretalx.event.plugins.enabled", person=self.request.user, data={"plugin": module}, orga=True, ) else: self.request.event.disable_plugin(module) self.request.event.log_action( "pretalx.event.plugins.disabled", person=self.request.user, data={"plugin": module}, orga=True, ) self.request.event.save() messages.success(self.request, _("Your changes have been saved.")) return redirect(self.request.event.orga_urls.plugins)
def post(self, request, *args, **kwargs): from pretalx.common.plugins import get_all_plugins plugins_active = self.request.event.get_plugins() plugins_available = { p.module: p for p in get_all_plugins() if not p.name.startswith('.') and getattr(p, 'visible', True) } with transaction.atomic(): for key, value in request.POST.items(): if key.startswith("plugin:"): module = key.split(":", maxsplit=1)[1] if value == "enable" and module in plugins_available: if hasattr(plugins_available[module].app, 'installed'): getattr(plugins_available[module].app, 'installed')(self.request.event) self.request.event.log_action('pretalx.event.plugins.enabled', person=self.request.user, data={'plugin': module}, orga=True) if module not in plugins_active: plugins_active.append(module) else: self.request.event.log_action('pretalx.event.plugins.disabled', person=self.request.user, data={'plugin': module}, orga=True) if module in plugins_active: plugins_active.remove(module) self.request.event.plugins = ','.join(plugins_active) self.request.event.save() messages.success(self.request, _('Your changes have been saved.')) return redirect(self.request.event.orga_urls.plugins)
def get_context_data(self, *args, **kwargs) -> dict: from pretalx.common.plugins import get_all_plugins context = super().get_context_data(*args, **kwargs) context['plugins'] = [ p for p in get_all_plugins() if not p.name.startswith('.') ] context['plugins_active'] = self.request.event.get_plugins() return context
def update_check(): gs = GlobalSettings() if not gs.settings.update_check_enabled: return if not gs.settings.update_check_id: gs.settings.set("update_check_id", uuid.uuid4().hex) if "runserver" in sys.argv: gs.settings.set("update_check_last", now()) gs.settings.set("update_check_result", {"error": "development"}) return check_payload = { "id": gs.settings.update_check_id, "version": pretalx_version, "events": { "total": Event.objects.count(), "public": Event.objects.filter(is_public=True).count(), }, "plugins": [{ "name": p.module, "version": p.version } for p in get_all_plugins()], } try: response = requests.post( "https://pretalx.com/.update_check/", json=check_payload, ) except requests.RequestException: gs.settings.set("update_check_last", now()) gs.settings.set("update_check_result", {"error": "unavailable"}) return gs.settings.set("update_check_last", now()) if response.status_code != 200: gs.settings.set("update_check_result", {"error": "http_error"}) return rdata = response.json() update_available = rdata["version"]["updatable"] or any( p["updatable"] for p in rdata["plugins"].values()) gs.settings.set("update_check_result_warning", update_available) if update_available and rdata != gs.settings.update_check_result: send_update_notification_email() gs.settings.set("update_check_result", rdata)
def set_active_plugins(self, modules): from pretalx.common.plugins import get_all_plugins plugins_active = self.get_plugins() plugins_available = { p.module: p for p in get_all_plugins(self) if not p.name.startswith('.') and getattr(p, 'visible', True) } enable = set(modules) & (set(plugins_available) - set(plugins_active)) for module in enable: if hasattr(plugins_available[module].app, 'installed'): getattr(plugins_available[module].app, 'installed')(self) self.plugins = ",".join(modules)
def plugin_list(self, modules: list) -> None: from pretalx.common.plugins import get_all_plugins plugins_active = set(self.plugin_list) plugins_available = { p.module: p for p in get_all_plugins(self) if not p.name.startswith(".") and getattr(p, "visible", True) } enable = set(modules) & (set(plugins_available) - plugins_active) disable = plugins_active - set(modules) for module in enable: with suppress(Exception): plugins_available[module].app.installed(self) for module in disable: with suppress(Exception): plugins_available[module].app.uninstalled(self) self.plugins = ",".join(modules)
def plugins(self): return [ p for p in get_all_plugins(self.request.event) if not p.name.startswith(".") and getattr(p, "visible", True) ]
def test_get_all_plugins(): assert PluginApp.PretalxPluginMeta in get_all_plugins(), get_all_plugins()
def test_get_all_plugins_with_event(event, expected): assert (PluginApp.PretalxPluginMeta in get_all_plugins(event)) is expected