Example #1
0
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
Example #2
0
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
Example #3
0
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
Example #4
0
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__)
Example #5
0
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
	}
Example #6
0
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 ""
Example #7
0
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__)
Example #8
0
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
Example #9
0
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__)
Example #10
0
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
Example #11
0
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
Example #12
0
	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
Example #13
0
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
Example #14
0
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
Example #15
0
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__)
Example #16
0
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
Example #17
0
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_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__)
Example #19
0
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}
Example #20
0
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}