def get_html_and_style(doc, name=None, print_format=None, meta=None, no_letterhead=None, trigger_print=False, style=None): """Returns `html` and `style` of print format, used in PDF etc""" if isinstance(doc, string_types) and isinstance(name, string_types): doc = frappe.get_doc(doc, name) if isinstance(doc, string_types): doc = frappe.get_doc(json.loads(doc)) print_format = get_print_format_doc(print_format, meta=meta or frappe.get_meta(doc.doctype)) try: html = get_rendered_template(doc, name=name, print_format=print_format, meta=meta, no_letterhead=no_letterhead, trigger_print=trigger_print) except frappe.TemplateNotFoundError: frappe.clear_last_message() html = None return { "html": html, "style": get_print_style(style=style, print_format=print_format) }
def validate_link(doctype: str, docname: str, fields=None): if not isinstance(doctype, str): frappe.throw(_("DocType must be a string")) if not isinstance(docname, str): frappe.throw(_("Document Name must be a string")) if doctype != "DocType" and not (frappe.has_permission( doctype, "select") or frappe.has_permission(doctype, "read")): frappe.throw( _("You do not have Read or Select Permissions for {}").format( frappe.bold(doctype)), frappe.PermissionError, ) values = frappe._dict() values.name = frappe.db.get_value(doctype, docname, cache=True) fields = frappe.parse_json(fields) if not values.name or not fields: return values try: values.update(get_value(doctype, fields, docname)) except frappe.PermissionError: frappe.clear_last_message() frappe.msgprint( _("You need {0} permission to fetch values from {1} {2}").format( frappe.bold(_("Read")), frappe.bold(doctype), frappe.bold(docname)), title=_("Cannot Fetch Values"), indicator="orange", ) return values
def extract_messages_from_code(code): """ Extracts translatable strings from a code file :param code: code from which translatable files are to be extracted :param is_py: include messages in triple quotes e.g. `_('''message''')` """ from jinja2 import TemplateError try: code = frappe.as_unicode(render_include(code)) # Exception will occur when it encounters John Resig's microtemplating code except (TemplateError, ImportError, InvalidIncludePath, IOError) as e: if isinstance(e, InvalidIncludePath): frappe.clear_last_message() pass messages = [] pattern = r"_\(([\"']{,3})(?P<message>((?!\1).)*)\1(\s*,\s*context\s*=\s*([\"'])(?P<py_context>((?!\5).)*)\5)*(\s*,\s*(.)*?\s*(,\s*([\"'])(?P<js_context>((?!\11).)*)\11)*)*\)" for m in re.compile(pattern).finditer(code): message = m.group('message') context = m.group('py_context') or m.group('js_context') pos = m.start() if is_translatable(message): messages.append([pos, message, context]) return add_line_number(messages, code)
def extract_messages_from_code(code): """ Extracts translatable strings from a code file :param code: code from which translatable files are to be extracted :param is_py: include messages in triple quotes e.g. `_('''message''')` """ from jinja2 import TemplateError try: code = frappe.as_unicode(render_include(code)) # Exception will occur when it encounters John Resig's microtemplating code except (TemplateError, ImportError, InvalidIncludePath, IOError) as e: if isinstance(e, InvalidIncludePath): frappe.clear_last_message() pass messages = [] for m in TRANSLATE_PATTERN.finditer(code): message = m.group("message") context = m.group("py_context") or m.group("js_context") pos = m.start() if is_translatable(message): messages.append([pos, message, context]) return add_line_number(messages, code)
def get_doc_before_save(self): if not getattr(self, '_doc_before_save', None): try: self._doc_before_save = frappe.get_doc(self.doctype, self.name) except frappe.DoesNotExistError: self._doc_before_save = None frappe.clear_last_message() return self._doc_before_save
def get_doc_before_save(self): if not getattr(self, '_doc_before_save', None): try: self._doc_before_save = frappe.get_doc(self.doctype, self.name) except frappe.DoesNotExistError: self._doc_before_save = None frappe.clear_last_message() return self._doc_before_save
def load_doc_before_save(self): """Save load document from db before saving""" self._doc_before_save = None if not self.is_new(): try: self._doc_before_save = frappe.get_doc(self.doctype, self.name) except frappe.DoesNotExistError: self._doc_before_save = None frappe.clear_last_message()