fix!: Remove badly written default portal list views (#35182)
* fix!: Remove badly written default portal list views * fix!: Remove guest permissions from web form list endpoint * test: cleanly terminate gunicorn int sometimes ends up leaving socket open
This commit is contained in:
parent
01ff456d48
commit
02ecb10205
6 changed files with 6 additions and 150 deletions
|
|
@ -1086,7 +1086,8 @@ class TestGunicornWorker(IntegrationTestCase):
|
|||
self.addCleanup(self.kill_gunicorn)
|
||||
|
||||
def kill_gunicorn(self):
|
||||
self.handle.send_signal(signal.SIGINT)
|
||||
time.sleep(1)
|
||||
self.handle.send_signal(signal.SIGTERM)
|
||||
try:
|
||||
self.handle.communicate(timeout=1)
|
||||
except subprocess.TimeoutExpired:
|
||||
|
|
|
|||
|
|
@ -21,23 +21,6 @@ class TestWebform(IntegrationTestCase):
|
|||
response = get_response()
|
||||
self.assertEqual(response.status_code, 404)
|
||||
|
||||
def test_get_context_hook_of_webform(self):
|
||||
create_custom_doctype()
|
||||
create_webform()
|
||||
|
||||
# check context for apps without any hook
|
||||
context_list = get_list_context("", "Custom Doctype", "test-webform")
|
||||
self.assertFalse(context_list)
|
||||
|
||||
# create a hook to get webform_context
|
||||
set_webform_hook(
|
||||
"webform_list_context",
|
||||
"frappe.www._test._test_webform.webform_list_context",
|
||||
)
|
||||
# check context for apps with hook
|
||||
context_list = get_list_context("", "Custom Doctype", "test-webform")
|
||||
self.assertTrue(context_list)
|
||||
|
||||
|
||||
def create_custom_doctype():
|
||||
frappe.get_doc(
|
||||
|
|
|
|||
|
|
@ -1,12 +0,0 @@
|
|||
import frappe
|
||||
from frappe.website.page_renderers.template_page import TemplatePage
|
||||
|
||||
|
||||
class ListPage(TemplatePage):
|
||||
def can_render(self):
|
||||
return frappe.db.exists("DocType", self.path, True)
|
||||
|
||||
def render(self):
|
||||
frappe.local.form_dict.doctype = self.path
|
||||
self.set_standard_path("list")
|
||||
return super().render()
|
||||
|
|
@ -6,7 +6,6 @@ from werkzeug.routing import Rule
|
|||
|
||||
import frappe
|
||||
from frappe.website.page_renderers.document_page import DocumentPage
|
||||
from frappe.website.page_renderers.list_page import ListPage
|
||||
from frappe.website.page_renderers.not_found_page import NotFoundPage
|
||||
from frappe.website.page_renderers.print_page import PrintPage
|
||||
from frappe.website.page_renderers.redirect_page import RedirectPage
|
||||
|
|
@ -60,7 +59,6 @@ class PathResolver:
|
|||
WebFormPage,
|
||||
DocumentPage,
|
||||
TemplatePage,
|
||||
ListPage,
|
||||
PrintPage,
|
||||
]
|
||||
|
||||
|
|
|
|||
|
|
@ -1,35 +0,0 @@
|
|||
{% extends "templates/web.html" %}
|
||||
|
||||
{% block title %}
|
||||
{{ title or (_("{0} List").format(_(doctype))) }}
|
||||
{% endblock %}
|
||||
|
||||
{% block header %}
|
||||
<h3 class="my-account-header">{{ title or (_("{0} List").format(_(doctype))) }}</h3>
|
||||
{% endblock %}
|
||||
|
||||
{% block breadcrumbs %}
|
||||
{% include "templates/includes/breadcrumbs.html" %}
|
||||
{% endblock %}
|
||||
|
||||
{% block header_actions %}
|
||||
{% if create_new %}
|
||||
<div class="pull-right">
|
||||
<a href="{{ create_new | abs_url }}" class="btn btn-primary btn-sm">
|
||||
{{ _("New") }}
|
||||
</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block footer %}{% endblock %} {# no footer #}
|
||||
|
||||
{% block page_content %}
|
||||
{% if introduction %}<p>{{ introduction }}</p>{% endif %}
|
||||
{% include list_template or "templates/includes/list/list.html" %}
|
||||
{% if list_footer %}{{ list_footer }}{% endif %}
|
||||
{% endblock %}
|
||||
|
||||
{% block script %}
|
||||
<script>{% include "templates/includes/list/list.js" %}</script>
|
||||
{% endblock %}
|
||||
|
|
@ -5,83 +5,14 @@ import json
|
|||
|
||||
import frappe
|
||||
from frappe import _
|
||||
from frappe.model.document import Document, get_controller
|
||||
from frappe.utils import cint, quoted
|
||||
from frappe.model.document import get_controller
|
||||
from frappe.utils import cint
|
||||
from frappe.website.path_resolver import resolve_path
|
||||
|
||||
no_cache = 1
|
||||
|
||||
|
||||
def get_context(context, **dict_params):
|
||||
"""Return context for a list standard list page.
|
||||
|
||||
Also update `get_list_context` from the doctype module file."""
|
||||
frappe.local.form_dict.update(dict_params)
|
||||
doctype = frappe.local.form_dict.doctype
|
||||
context.parents = [{"route": "me", "title": _("My Account")}]
|
||||
context.meta = frappe.get_meta(doctype)
|
||||
context.update(get_list_context(context, doctype) or {})
|
||||
context.doctype = doctype
|
||||
context.txt = frappe.local.form_dict.txt
|
||||
context.update(get(**frappe.local.form_dict))
|
||||
|
||||
|
||||
@frappe.whitelist(allow_guest=True)
|
||||
def get(
|
||||
doctype: str,
|
||||
txt: str | None = None,
|
||||
limit_start: int = 0,
|
||||
limit: int = 20,
|
||||
pathname: str | None = None,
|
||||
**kwargs,
|
||||
):
|
||||
"""Return processed HTML page for a standard listing."""
|
||||
limit_start = cint(limit_start)
|
||||
raw_result = get_list_data(doctype, txt, limit_start, limit=limit + 1, **kwargs)
|
||||
show_more = len(raw_result) > limit
|
||||
if show_more:
|
||||
raw_result = raw_result[:-1]
|
||||
|
||||
meta = frappe.get_meta(doctype)
|
||||
list_context = frappe.flags.list_context
|
||||
|
||||
if not raw_result:
|
||||
return {"result": []}
|
||||
|
||||
if txt:
|
||||
list_context.default_subtitle = _('Filtered by "{0}"').format(txt)
|
||||
|
||||
result = []
|
||||
row_template = list_context.row_template or "templates/includes/list/row_template.html"
|
||||
list_view_fields = [df for df in meta.fields if df.in_list_view][:4]
|
||||
|
||||
for doc in raw_result:
|
||||
doc.doctype = doctype
|
||||
new_context = frappe._dict(doc=doc, meta=meta, list_view_fields=list_view_fields)
|
||||
|
||||
if not list_context.get_list and not isinstance(new_context.doc, Document):
|
||||
new_context.doc = frappe.get_doc(doc.doctype, doc.name)
|
||||
new_context.update(new_context.doc.as_dict())
|
||||
|
||||
if not frappe.in_test:
|
||||
pathname = pathname or frappe.local.request.path
|
||||
new_context["pathname"] = pathname.strip("/ ")
|
||||
new_context.update(list_context)
|
||||
set_route(new_context)
|
||||
rendered_row = frappe.render_template(row_template, new_context, is_path=True)
|
||||
result.append(rendered_row)
|
||||
|
||||
from frappe.utils.response import json_handler
|
||||
|
||||
return {
|
||||
"raw_result": json.dumps(raw_result, default=json_handler),
|
||||
"result": result,
|
||||
"show_more": show_more,
|
||||
"next_start": limit_start + limit,
|
||||
}
|
||||
|
||||
|
||||
@frappe.whitelist(allow_guest=True)
|
||||
@frappe.whitelist()
|
||||
def get_list_data(
|
||||
doctype: str,
|
||||
txt: str | None = None,
|
||||
|
|
@ -137,16 +68,6 @@ def get_list_data(
|
|||
return raw_result
|
||||
|
||||
|
||||
def set_route(context):
|
||||
"""Set link for the list item"""
|
||||
if context.web_form_name:
|
||||
context.route = f"{context.pathname}?name={quoted(context.doc.name)}"
|
||||
elif context.doc and getattr(context.doc, "route", None):
|
||||
context.route = context.doc.route
|
||||
else:
|
||||
context.route = f"{context.pathname or quoted(context.doc.doctype)}/{quoted(context.doc.name)}"
|
||||
|
||||
|
||||
def prepare_filters(doctype, controller, kwargs):
|
||||
for key in kwargs.keys():
|
||||
try:
|
||||
|
|
@ -219,7 +140,7 @@ def get_list_context(context, doctype, web_form_name=None):
|
|||
list_context.row_template = meta.get_row_template()
|
||||
|
||||
if not meta.custom and not list_context.list_template:
|
||||
list_context.template = meta.get_list_template() or "www/list.html"
|
||||
list_context.template = meta.get_list_template()
|
||||
|
||||
return list_context
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue