def get_list_data(doctype, txt=None, limit_start=0, limit=20, **kwargs): """Returns processed HTML page for a standard listing.""" limit_start = cint(limit_start) if not txt and frappe.form_dict.search: txt = frappe.form_dict.search del frappe.form_dict['search'] controller = get_controller(doctype) meta = frappe.get_meta(doctype) filters = prepare_filters(doctype, controller, kwargs) list_context = get_list_context(frappe._dict(), doctype) list_context.title_field = getattr(controller, 'website', {}).get('page_title_field', meta.title_field or 'name') if list_context.filters: filters.update(list_context.filters) _get_list = list_context.get_list or get_list kwargs = dict(doctype=doctype, txt=txt, filters=filters, limit_start=limit_start, limit_page_length=limit, order_by = list_context.order_by or 'modified desc') # allow guest if flag is set if not list_context.get_list and (list_context.allow_guest or meta.allow_guest_to_view): kwargs['ignore_permissions'] = True raw_result = _get_list(**kwargs) # list context to be used if called as rendered list frappe.flags.list_context = list_context return raw_result
def get_page_context_from_doctypes(): routes = frappe.cache().get_value("website_generator_routes") if not routes: routes = {} for app in frappe.get_installed_apps(): for doctype in frappe.get_hooks("website_generators", app_name = app): condition = "" route_column_name = "page_name" controller = get_controller(doctype) meta = frappe.get_meta(doctype) if meta.get_field("parent_website_route"): route_column_name = """concat(ifnull(parent_website_route, ""), if(ifnull(parent_website_route, "")="", "", "/"), page_name)""" if controller.website.condition_field: condition ="where {0}=1".format(controller.website.condition_field) for r in frappe.db.sql("""select {0} as route, name, modified from `tab{1}` {2}""".format(route_column_name, doctype, condition), as_dict=True): routes[r.route] = {"doctype": doctype, "name": r.name, "modified": r.modified} frappe.cache().set_value("website_generator_routes", routes) return routes
def get_page_info_from_doctypes(path=None): routes = {} for doctype in get_doctypes_with_web_view(): condition = "" values = [] controller = get_controller(doctype) meta = frappe.get_meta(doctype) condition_field = meta.is_published_field or controller.website.condition_field if condition_field: condition ="where {0}=1".format(condition_field) if path: condition += ' {0} `route`=%s limit 1'.format('and' if 'where' in condition else 'where') values.append(path) try: for r in frappe.db.sql("""select route, name, modified from `tab{0}` {1}""".format(doctype, condition), values=values, as_dict=True): routes[r.route] = {"doctype": doctype, "name": r.name, "modified": r.modified} # just want one path, return it! if path: return routes[r.route] except Exception as e: if e.args[0]!=1054: raise e return routes
def get_version(name): def _for_module(m): return importlib.import_module(m.split(".")[0]).__version__ if "." in name or name=="frappe": return _for_module(name) else: return _for_module(get_controller(name).__module__)
def get(doctype, txt=None, limit_start=0, limit=20, **kwargs): """Returns processed HTML page for a standard listing.""" limit_start = cint(limit_start) limit_page_length = limit next_start = limit_start + limit_page_length if not txt and frappe.form_dict.search: txt = frappe.form_dict.search del frappe.form_dict['search'] controller = get_controller(doctype) meta = frappe.get_meta(doctype) filters = prepare_filters(doctype, controller, kwargs) list_context = get_list_context(frappe._dict(), doctype) list_context.title_field = getattr(controller, 'website', {}).get('page_title_field', meta.title_field or 'name') if list_context.filters: filters.update(list_context.filters) _get_list = list_context.get_list or get_list raw_result = _get_list(doctype=doctype, txt=txt, filters=filters, limit_start=limit_start, limit_page_length=limit_page_length) if not raw_result: return {"result": []} show_more = (_get_list(doctype=doctype, txt=txt, filters=filters, limit_start=next_start, limit_page_length=1) and True or False) 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" for doc in raw_result: doc.doctype = doctype new_context = frappe._dict(doc=doc, meta=meta) if not list_context.get_list and not isinstance(new_context.doc, Document): new_context.doc = frappe.get_doc(doc.doctype, doc.name) if not frappe.flags.in_test: new_context["pathname"] = frappe.local.request.path.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) return { "result": result, "show_more": show_more, "next_start": next_start }
def get_doclink(name): """Returns `__doclink__` property of a module or DocType if exists""" if name=="[Select]": return "" if "." in name: obj = frappe.get_attr(name) else: obj = get_controller(name) if hasattr(obj, "__doclink__"): return obj.__doclink__ else: return ""
def get_version(name): print name global installed if not installed: installed = frappe.get_installed_apps() def _for_module(m): return getattr(importlib.import_module(m.split(".")[0]), "__version__", "0.0.0") if "." in name or name in installed: return _for_module(name) else: return _for_module(get_controller(name).__module__)
def process_generators(func): for app in frappe.get_installed_apps(): for doctype in frappe.get_hooks("website_generators", app_name=app): order_by = "name asc" condition_field = None controller = get_controller(doctype) if hasattr(controller, "condition_field"): condition_field = controller.condition_field if hasattr(controller, "order_by"): order_by = controller.order_by val = func(doctype, condition_field, order_by) if val: return val
def process_generators(func): for app in frappe.get_installed_apps(): for doctype in frappe.get_hooks("website_generators", app_name = app): order_by = "name asc" condition_field = None controller = get_controller(doctype) if hasattr(controller, "condition_field"): condition_field = controller.condition_field if hasattr(controller, "order_by"): order_by = controller.order_by val = func(doctype, condition_field, order_by) if val: return val
def get_list_data(doctype, txt=None, limit_start=0, fields=None, cmd=None, limit=20, web_form_name=None, **kwargs): """Returns processed HTML page for a standard listing.""" limit_start = cint(limit_start) if not txt and frappe.form_dict.search: txt = frappe.form_dict.search del frappe.form_dict['search'] controller = get_controller(doctype) meta = frappe.get_meta(doctype) filters = prepare_filters(doctype, controller, kwargs) list_context = get_list_context(frappe._dict(), doctype, web_form_name) list_context.title_field = getattr(controller, 'website', {}).get('page_title_field', meta.title_field or 'name') if list_context.filters: filters.update(list_context.filters) _get_list = list_context.get_list or get_list kwargs = dict(doctype=doctype, txt=txt, filters=filters, limit_start=limit_start, limit_page_length=limit, order_by=list_context.order_by or 'modified desc') # allow guest if flag is set if not list_context.get_list and (list_context.allow_guest or meta.allow_guest_to_view): kwargs['ignore_permissions'] = True raw_result = _get_list(**kwargs) # list context to be used if called as rendered list frappe.flags.list_context = list_context return raw_result
def get_sitemap_routes(): routes = {} doctypes_with_web_view = [d.name for d in frappe.db.get_all('DocType', { 'has_web_view': 1, 'allow_guest_to_view': 1 })] for doctype in doctypes_with_web_view: controller = get_controller(doctype) meta = frappe.get_meta(doctype) condition_field = meta.is_published_field or controller.website.condition_field try: res = frappe.db.get_all(doctype, ['route', 'name', 'modified'], { condition_field: 1 }) for r in res: routes[r.route] = {"doctype": doctype, "name": r.name, "modified": r.modified} except Exception as e: if not frappe.db.is_missing_column(e): raise e return routes
def get_page_info_from_doctypes(path=None): routes = {} for doctype in get_doctypes_with_web_view(): condition = "" values = [] controller = get_controller(doctype) meta = frappe.get_meta(doctype) condition_field = ( meta.is_published_field or # custom doctypes dont have controllers and no website attribute (controller.website.condition_field if not meta.custom else None)) if condition_field: condition = "where {0}=1".format(condition_field) if path: condition += ' {0} `route`=%s limit 1'.format( 'and' if 'where' in condition else 'where') values.append(path) try: for r in frappe.db.sql( """select route, name, modified from `tab{0}` {1}""".format(doctype, condition), values=values, as_dict=True): routes[r.route] = { "doctype": doctype, "name": r.name, "modified": r.modified } # just want one path, return it! if path: return routes[r.route] except Exception as e: if not frappe.db.is_missing_column(e): raise e return routes
def get_page_info_from_doctypes(path=None): ''' Find a document with matching `route` from all doctypes with `has_web_view`=1 ''' routes = {} for doctype in get_doctypes_with_web_view(): filters = {} controller = get_controller(doctype) meta = frappe.get_meta(doctype) condition_field = ( meta.is_published_field or # custom doctypes dont have controllers and no website attribute (controller.website.condition_field if not meta.custom else None)) if condition_field: filters[condition_field] = 1 if path: filters['route'] = path try: for r in frappe.get_all(doctype, fields=['name', 'route', 'modified'], filters=filters, limit=1): routes[r.route] = { "doctype": doctype, "name": r.name, "modified": r.modified } # just want one path, return it! if path: return routes[r.route] except Exception as e: if not frappe.db.is_missing_column(e): raise e return routes
def get_version(name): print name global installed if not installed: installed = frappe.get_installed_apps() def _for_module(m): app_name = m.split(".")[0] try: docs_version = frappe.get_attr(app_name + ".config.docs.docs_version") except AttributeError: docs_version = None if docs_version: return docs_version return getattr(importlib.import_module(m.split(".")[0]), "__version__", "0.0.0") if "." in name or name in installed: return _for_module(name) else: return _for_module(get_controller(name).__module__)
def get_page_info_from_doctypes(path=None): routes = {} for app in frappe.get_installed_apps(): for doctype in frappe.get_hooks("website_generators", app_name = app): condition = "" values = [] controller = get_controller(doctype) if controller.website.condition_field: condition ="where {0}=1".format(controller.website.condition_field) if path: condition += ' {0} `route`=%s limit 1'.format('and' if 'where' in condition else 'where') values.append(path) for r in frappe.db.sql("""select route, name, modified from `tab{0}` {1}""".format(doctype, condition), values=values, as_dict=True): routes[r.route] = {"doctype": doctype, "name": r.name, "modified": r.modified} # just want one path, return it! if path: return routes[r.route] return routes
def get(doctype, txt=None, limit_start=0, limit=20, **kwargs): """Returns processed HTML page for a standard listing.""" limit_start = cint(limit_start) limit_page_length = limit next_start = limit_start + limit_page_length if not txt and frappe.form_dict.search: txt = frappe.form_dict.search del frappe.form_dict['search'] controller = get_controller(doctype) meta = frappe.get_meta(doctype) filters = prepare_filters(doctype, controller, kwargs) list_context = get_list_context(frappe._dict(), doctype) list_context.title_field = getattr(controller, 'website', {}).get('page_title_field', meta.title_field or 'name') if list_context.filters: filters.update(list_context.filters) _get_list = list_context.get_list or get_list raw_result = _get_list(doctype=doctype, txt=txt, filters=filters, limit_start=limit_start, limit_page_length=limit_page_length) if not raw_result: return {"result": []} show_more = (_get_list(doctype=doctype, txt=txt, filters=filters, limit_start=next_start, limit_page_length=1) and True or False) 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" for doc in raw_result: doc.doctype = doctype new_context = frappe._dict(doc=doc, meta=meta) if not list_context.get_list and not isinstance( new_context.doc, Document): new_context.doc = frappe.get_doc(doc.doctype, doc.name) if not frappe.flags.in_test: new_context["pathname"] = frappe.local.request.path.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) return {"result": result, "show_more": show_more, "next_start": next_start}
def get(doctype, txt=None, limit_start=0, limit=20, **kwargs): """Returns processed HTML page for a standard listing.""" limit_start = cint(limit_start) limit_page_length = limit next_start = limit_start + limit_page_length if not txt and frappe.form_dict.search: txt = frappe.form_dict.search del frappe.form_dict['search'] controller = get_controller(doctype) meta = frappe.get_meta(doctype) filters = prepare_filters(doctype, controller, kwargs) list_context = get_list_context(frappe._dict(), doctype) list_context.title_field = getattr(controller, 'website', {}).get('page_title_field', meta.title_field or 'name') if list_context.filters: filters.update(list_context.filters) _get_list = list_context.get_list or get_list kwargs = dict(doctype=doctype, txt=txt, filters=filters, limit_start=limit_start, limit_page_length=limit_page_length + 1, order_by=list_context.order_by or 'modified desc') # allow guest if flag is set if not list_context.get_list and (list_context.allow_guest or meta.allow_guest_to_view): kwargs['ignore_permissions'] = True raw_result = _get_list(**kwargs) if not raw_result: return {"result": []} show_more = len(raw_result) > limit_page_length if show_more: raw_result = raw_result[:-1] 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" for doc in raw_result: doc.doctype = doctype new_context = frappe._dict(doc=doc, meta=meta) 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.flags.in_test: new_context["pathname"] = str( jinja2.escape(frappe.local.request.path.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) return {"result": result, "show_more": show_more, "next_start": next_start}