def get_permissions(doctype=None, role=None): frappe.only_for("System Manager") return frappe.db.sql("""select * from tabDocPerm where %s%s order by parent, permlevel, role""" % (doctype and (" parent='%s'" % doctype.replace("'", "\'")) or "", role and ((doctype and " and " or "") + " role='%s'" % role.replace("'", "\'")) or ""), as_dict=True)
def update(hidden_list, user=None): """update modules""" if not user: frappe.only_for('System Manager') set_hidden_list(hidden_list, user) frappe.msgprint(frappe._('Updated'))
def get_roles_and_doctypes(): frappe.only_for("System Manager") send_translations(frappe.get_lang_dict("doctype", "DocPerm")) active_domains = frappe.get_active_domains() doctypes = frappe.get_all("DocType", filters={ "istable": 0, "name": ("not in", ",".join(not_allowed_in_permission_manager)), }, or_filters={ "ifnull(restrict_to_domain, '')": "", "restrict_to_domain": ("in", active_domains) }, fields=["name"]) roles = frappe.get_all("Role", filters={ "name": ("not in", "Administrator"), "disabled": 0, }, or_filters={ "ifnull(restrict_to_domain, '')": "", "restrict_to_domain": ("in", active_domains) }, fields=["name"]) doctypes_list = [ {"label":_(d.get("name")), "value":d.get("name")} for d in doctypes] roles_list = [ {"label":_(d.get("name")), "value":d.get("name")} for d in roles] return { "doctypes": sorted(doctypes_list, key=lambda d: d['label']), "roles": sorted(roles_list, key=lambda d: d['label']) }
def update(hidden_list, user=None): """update modules""" if not user: frappe.only_for('System Manager') set_hidden_list(hidden_list, user) frappe.msgprint(frappe._('Updated'), indicator='green', title=_('Success'), alert=True)
def download_backup(path): try: frappe.only_for(("System Manager", "Administrator")) except frappe.PermissionError: raise Forbidden(_("You need to be logged in and have System Manager Role to be able to access backups.")) return send_private_file(path)
def delete_company_transactions(company_name): frappe.only_for("System Manager") doc = frappe.get_doc("Company", company_name) if frappe.session.user != doc.owner: frappe.throw(_("Transactions can only be deleted by the creator of the Company"), frappe.PermissionError) delete_bins(company_name) delete_time_logs(company_name) delete_lead_addresses(company_name) for doctype in frappe.db.sql_list( """select parent from tabDocField where fieldtype='Link' and options='Company'""" ): if doctype not in ( "Account", "Cost Center", "Warehouse", "Budget Detail", "Party Account", "Employee", "Sales Taxes and Charges Template", "Purchase Taxes and Charges Template", "POS Profile", ): delete_for_doctype(doctype, company_name) # Clear notification counts clear_notifications()
def install_app(name): """Install app, if app is not installed in local environment, install it via git url in `frappe/data/app_listing/`""" frappe.only_for("System Manager") if name not in frappe.get_all_apps(True): if not frappe.conf.disallow_app_listing: get_app(name) frappe.cache().delete_value(["app_hooks"]) # reload sys.path import site reload(site) else: # will only come via direct API frappe.throw("Listing app not allowed") app_hooks = frappe.get_hooks(app_name=name) if app_hooks.get('hide_in_installer'): frappe.throw(_("You cannot install this app")) frappe.publish_realtime("install_app_progress", {"status": _("Installing App {0}").format(name)}, user=frappe.session.user, now=True) frappe.installer.install_app(name) frappe.publish_realtime("install_app_progress", {"status": _("{0} Installed").format(name)}, user=frappe.session.user, now=True)
def install_app(name, verbose=False, set_as_patched=True): frappe.flags.in_install_app = name frappe.clear_cache() app_hooks = frappe.get_hooks(app_name=name) installed_apps = frappe.get_installed_apps() if name not in frappe.get_all_apps(with_frappe=True): raise Exception("App not in apps.txt") if name in installed_apps: print "App Already Installed" frappe.msgprint(_("App Already Installed")) return if name != "frappe": frappe.only_for("System Manager") for before_install in app_hooks.before_install or []: frappe.get_attr(before_install)() if name != "frappe": add_module_defs(name) sync_for(name, force=True, sync_everything=True, verbose=verbose) add_to_installed_apps(name) if set_as_patched: set_all_patches_as_completed(name) for after_install in app_hooks.after_install or []: frappe.get_attr(after_install)() frappe.flags.in_install_app = False
def get_users_with_role(role): frappe.only_for("System Manager") return [p[0] for p in frappe.db.sql("""select distinct tabUser.name from `tabHas Role`, tabUser where `tabHas Role`.role=%s and tabUser.name != "Administrator" and `tabHas Role`.parent = tabUser.name and tabUser.enabled=1""", role)]
def remove_app(name): """Remove installed app""" frappe.only_for("System Manager") if name in frappe.get_installed_apps(): enqueue('frappe.desk.page.applications.applications.start_remove', name=name) frappe.msgprint(_('Queued for backup and removing {0}').format(frappe.bold(name)))
def get_users_with_role(role): frappe.only_for("System Manager") return [p[0] for p in frappe.db.sql("""select distinct tabUser.name from tabUserRole, tabUser where tabUserRole.role=%s and tabUser.name != "Administrator" and tabUserRole.parent = tabUser.name and ifnull(tabUser.enabled,0)=1""", role)]
def clear_user_permissions(user, for_doctype): frappe.only_for('System Manager') total = frappe.db.count('User Permission', filters = dict(user=user, allow=for_doctype)) if total: frappe.db.sql('DELETE FROM `tabUser Permission` WHERE user=%s AND allow=%s', (user, for_doctype)) frappe.clear_cache() return total
def install_app(name, verbose=False, set_as_patched=True): frappe.flags.in_install = name frappe.flags.ignore_in_install = False frappe.clear_cache() app_hooks = frappe.get_hooks(app_name=name) installed_apps = frappe.get_installed_apps() # install pre-requisites if app_hooks.required_apps: for app in app_hooks.required_apps: install_app(app) frappe.flags.in_install = name frappe.clear_cache() if name not in frappe.get_all_apps(): raise Exception("App not in apps.txt") if name in installed_apps: frappe.msgprint(_("App {0} already installed").format(name)) return print("\nInstalling {0}...".format(name)) if name != "frappe": frappe.only_for("System Manager") for before_install in app_hooks.before_install or []: out = frappe.get_attr(before_install)() if out==False: return if name != "frappe": add_module_defs(name) sync_for(name, force=True, sync_everything=True, verbose=verbose, reset_permissions=True) sync_from_app(name) add_to_installed_apps(name) frappe.get_doc('Portal Settings', 'Portal Settings').sync_menu() if set_as_patched: set_all_patches_as_completed(name) for after_install in app_hooks.after_install or []: frappe.get_attr(after_install)() sync_fixtures(name) sync_customizations(name) for after_sync in app_hooks.after_sync or []: frappe.get_attr(after_sync)() # frappe.flags.in_install = False
def get_password(doctype, name, fieldname): '''Return a password type property. Only applicable for System Managers :param doctype: DocType of the document that holds the password :param name: `name` of the document that holds the password :param fieldname: `fieldname` of the password property ''' frappe.only_for("System Manager") return frappe.get_doc(doctype, name).get_password(fieldname)
def get_roles_and_doctypes(): frappe.only_for("System Manager") send_translations(frappe.get_lang_dict("doctype", "DocPerm")) return { "doctypes": [d[0] for d in frappe.db.sql("""select name from `tabDocType` dt where istable=0 and name not in ('DocType')""")], "roles": [d[0] for d in frappe.db.sql("""select name from tabRole where name != 'Administrator' and disabled=0""")] }
def on_trash(self): if (self.comment_type or "Comment") != "Comment": frappe.only_for("System Manager") _comments = self.get_comments_from_parent() for c in _comments: if c.get("name")==self.name: _comments.remove(c) self.update_comments_in_parent(_comments)
def get_roles_and_doctypes(): frappe.only_for("System Manager") return { "doctypes": [d[0] for d in frappe.db.sql("""select name from `tabDocType` dt where ifnull(istable,0)=0 and name not in ('DocType') and exists(select * from `tabDocField` where parent=dt.name)""")], "roles": [d[0] for d in frappe.db.sql("""select name from tabRole where name not in ('Guest', 'Administrator')""")] }
def import_user_permissions(): frappe.only_for("System Manager") rows = read_csv_content_from_uploaded_file(ignore_encoding=True) clear_default(parenttype="User Permission") if rows[0][0]!="User Permissions" and rows[1][0] != "User": frappe.throw(frappe._("Please upload using the same template as download.")) for row in rows[2:]: frappe.permissions.add_user_permission(row[1], row[2], row[0])
def get_standard_permissions(doctype): frappe.only_for("System Manager") meta = frappe.get_meta(doctype) if meta.custom: doc = frappe.get_doc('DocType', doctype) return [p.as_dict() for p in doc.permissions] else: # also used to setup permissions via patch path = get_file_path(meta.module, "DocType", doctype) return read_doc_from_file(path).get("permissions")
def remove(doctype, role, permlevel): frappe.only_for("System Manager") setup_custom_perms(doctype) name = frappe.get_value('Custom DocPerm', dict(parent=doctype, role=role, permlevel=permlevel)) frappe.db.sql('delete from `tabCustom DocPerm` where name=%s', name) if not frappe.get_all('Custom DocPerm', dict(parent=doctype)): frappe.throw(_('There must be atleast one permission rule.'), title=_('Cannot Remove')) validate_permissions_for_doctype(doctype, for_remove=True)
def get_roles_and_doctypes(): frappe.only_for("System Manager") send_translations(frappe.get_lang_dict("doctype", "DocPerm")) return { "doctypes": [d[0] for d in frappe.db.sql("""select name from `tabDocType` dt where ifnull(istable,0)=0 and name not in ('DocType') and exists(select * from `tabDocField` where parent=dt.name)""")], "roles": [d[0] for d in frappe.db.sql("""select name from tabRole where name not in ('Administrator')""")] }
def remove(doctype, role, permlevel): frappe.only_for("System Manager") setup_custom_perms(doctype) name = frappe.get_value( 'Custom DocPerm', dict(parent=doctype, role=role, permlevel=permlevel)) frappe.db.sql('delete from `tabCustom DocPerm` where name=%s', name) if not frappe.get_all('Custom DocPerm', dict(parent=doctype)): frappe.throw(_('There must be atleast one permission rule.'), title=_('Cannot Remove')) validate_permissions_for_doctype(doctype, for_remove=True)
def get_permissions(doctype=None, role=None): frappe.only_for("System Manager") out = frappe.db.sql("""select * from tabDocPerm where %s%s order by parent, permlevel, role""" % (doctype and (" parent='%s'" % frappe.db.escape(doctype)) or "", role and ((doctype and " and " or "") + " role='%s'" % frappe.db.escape(role)) or ""), as_dict=True) linked_doctypes = {} for d in out: d.linked_doctypes = linked_doctypes.setdefault(d.parent, get_linked_doctypes(d.parent)) return out
def get_module_icons_html(user=None): if user != frappe.session.user: frappe.only_for('System Manager') if not user: icons = frappe.db.get_all('Desktop Icon', fields='*', filters={'standard': 1}, order_by='idx') else: frappe.cache().hdel('desktop_icons', user) icons = get_user_icons(user) return frappe.render_template('frappe/core/page/modules_setup/includes/module_icons.html', {'icons': icons, 'user': user})
def delete_company_transactions(company_name): frappe.only_for("System Manager") doc = frappe.get_doc("Company", company_name) if frappe.session.user != doc.owner: frappe.throw(_("Transactions can only be deleted by the creator of the Company"), frappe.PermissionError) delete_bins(company_name) for doctype in frappe.db.sql_list("""select parent from tabDocField where fieldtype='Link' and options='Company'"""): if doctype not in ("Account", "Cost Center", "Warehouse", "Budget Detail", "Party Account"): delete_for_doctype(doctype, company_name)
def install_app(name, verbose=False, set_as_patched=True): frappe.clear_cache() app_hooks = frappe.get_hooks(app_name=name) installed_apps = frappe.get_installed_apps() # install pre-requisites if app_hooks.required_apps: for app in app_hooks.required_apps: install_app(app) frappe.flags.in_install = name frappe.clear_cache() if name not in frappe.get_all_apps(): raise Exception("App not in apps.txt") if name in installed_apps: frappe.msgprint("App {0} already installed".format(name)) return print "Installing {0}...".format(name) if name != "frappe": frappe.only_for("System Manager") for before_install in app_hooks.before_install or []: out = frappe.get_attr(before_install)() if out == False: return if name != "frappe": add_module_defs(name) sync_for(name, force=True, sync_everything=True, verbose=verbose) sync_from_app(name) add_to_installed_apps(name) frappe.get_doc('Portal Settings', 'Portal Settings').sync_menu() if set_as_patched: set_all_patches_as_completed(name) for after_install in app_hooks.after_install or []: frappe.get_attr(after_install)() sync_fixtures(name) sync_customizations(name) frappe.flags.in_install = False
def import_all_jasper_remote_reports(docs, force=True): frappe.only_for("Administrator") if not docs: return frappe.flags.in_import = True for d in docs: import_doc(d.parent_doc.as_dict(), force=force) for param_doc in d.param_docs: import_doc(param_doc.as_dict(), force=force) for perm_doc in d.perm_docs: import_doc(perm_doc.as_dict(), force=force) #frappe.db.commit() frappe.flags.in_import = False
def update_global_hidden_modules(modules): modules = frappe.parse_json(modules) frappe.only_for('System Manager') doc = frappe.get_doc('User', 'Administrator') doc.set('block_modules', []) for module in modules: doc.append('block_modules', { 'module': module }) doc.save(ignore_permissions=True) return get_desktop_settings()
def get_roles_and_doctypes(): frappe.only_for("System Manager") send_translations(frappe.get_lang_dict("doctype", "DocPerm")) return { "doctypes": [ d[0] for d in frappe.db.sql("""select name from `tabDocType` dt where istable=0 and name not in ('DocType')""") ], "roles": [ d[0] for d in frappe.db.sql("""select name from tabRole where name != 'Administrator' and disabled=0""") ] }
def add_user_permissions(data): """Add and update the user permissions""" frappe.only_for("System Manager") if isinstance(data, frappe.string_types): data = json.loads(data) data = frappe._dict(data) # get all doctypes on whom this permission is applied perm_applied_docs = check_applicable_doc_perm(data.user, data.doctype, data.docname) exists = frappe.db.exists( "User Permission", { "user": data.user, "allow": data.doctype, "for_value": data.docname, "apply_to_all_doctypes": 1, }, ) if data.apply_to_all_doctypes == 1 and not exists: remove_applicable(perm_applied_docs, data.user, data.doctype, data.docname) insert_user_perm( data.user, data.doctype, data.docname, data.is_default, data.hide_descendants, apply_to_all=1 ) return 1 elif len(data.applicable_doctypes) > 0 and data.apply_to_all_doctypes != 1: remove_apply_to_all(data.user, data.doctype, data.docname) update_applicable( perm_applied_docs, data.applicable_doctypes, data.user, data.doctype, data.docname ) for applicable in data.applicable_doctypes: if applicable not in perm_applied_docs: insert_user_perm( data.user, data.doctype, data.docname, data.is_default, data.hide_descendants, applicable=applicable, ) elif exists: insert_user_perm( data.user, data.doctype, data.docname, data.is_default, data.hide_descendants, applicable=applicable, ) return 1 return 0
def on_trash(self): """Removes from `_comments` in parent Document""" if self.comment_doctype == "Message": return if (self.comment_type or "Comment") != "Comment": frappe.only_for("System Manager") _comments = self.get_comments_from_parent() for c in _comments: if c.get("name") == self.name: _comments.remove(c) self.update_comments_in_parent(_comments)
def on_trash(self): """Removes from `_comments` in parent Document""" if self.comment_doctype == "Message": return if (self.comment_type or "Comment") != "Comment": frappe.only_for("System Manager") _comments = self.get_comments_from_parent() for c in _comments: if c.get("name")==self.name: _comments.remove(c) self.update_comments_in_parent(_comments)
def get_todos(date=None): from werkzeug.exceptions import Forbidden try: frappe.only_for(("System Manager")) except frappe.PermissionError: raise Forbidden( _("You need to be logged in and have System Manager or Account Manager Role to be able to download this zip." )) todos = frappe.get_all("ToDo", filters={"owner": frappe.session.user}, fields=["*"]) return todos
def add(parent, role, permlevel): frappe.only_for("System Manager") frappe.get_doc({ "doctype":"DocPerm", "__islocal": 1, "parent": parent, "parenttype": "DocType", "parentfield": "permissions", "role": role, "permlevel": permlevel, "read": 1 }).save() validate_and_reset(parent)
def add(parent, role, permlevel): frappe.only_for("System Manager") frappe.get_doc({ "doctype": "DocPerm", "__islocal": 1, "parent": parent, "parenttype": "DocType", "parentfield": "permissions", "role": role, "permlevel": permlevel, "read": 1 }).save() validate_and_reset(parent)
def update(doctype, role, permlevel, ptype, value=None): frappe.only_for("System Manager") out = None if setup_custom_perms(doctype): out = 'refresh' name = frappe.get_value( 'Custom DocPerm', dict(parent=doctype, role=role, permlevel=permlevel)) frappe.db.sql("""update `tabCustom DocPerm` set `%s`=%s where name=%s"""\ % (frappe.db.escape(ptype), '%s', '%s'), (value, name)) validate_permissions_for_doctype(doctype) return out
def replace_abbr(company, old, new): frappe.only_for("System Manager") frappe.db.set_value("Company", company, "abbr", new) def _rename_record(dt): for d in frappe.db.sql("select name from `tab%s` where company=%s" % (dt, '%s'), company): parts = d[0].split(" - ") if parts[-1].lower() == old.lower(): name_without_abbr = " - ".join(parts[:-1]) frappe.rename_doc(dt, d[0], name_without_abbr + " - " + new) for dt in ["Account", "Cost Center", "Warehouse"]: _rename_record(dt) frappe.db.commit()
def get_module_icons(user=None): if user != frappe.session.user: frappe.only_for('System Manager') if not user: icons = frappe.db.get_all('Desktop Icon', fields='*', filters={'standard': 1}, order_by='idx') else: frappe.cache().hdel('desktop_icons', user) icons = get_user_icons(user) for icon in icons: icon.value = frappe.db.escape(_(icon.label or icon.module_name)) return {'icons': icons, 'user': user}
def clear_user_permissions(user, for_doctype): frappe.only_for("System Manager") total = frappe.db.count("User Permission", { "user": user, "allow": for_doctype }) if total: frappe.db.delete("User Permission", { "allow": for_doctype, "user": user, }) frappe.clear_cache() return total
def remove(doctype, role, permlevel): frappe.only_for("System Manager") setup_custom_perms(doctype) frappe.db.delete("Custom DocPerm", { "parent": doctype, "role": role, "permlevel": permlevel }) if not frappe.get_all('Custom DocPerm', {"parent": doctype}): frappe.throw(_('There must be atleast one permission rule.'), title=_('Cannot Remove')) validate_permissions_for_doctype(doctype, for_remove=True, alert=True)
def get_roles_and_doctypes(): frappe.only_for("System Manager") return { "doctypes": [ d[0] for d in frappe.db.sql("""select name from `tabDocType` dt where ifnull(istable,0)=0 and name not in ('DocType', 'Control Panel') and exists(select * from `tabDocField` where parent=dt.name)""") ], "roles": [ d[0] for d in frappe.db.sql( """select name from tabRole where name not in ('Guest', 'Administrator')""") ] }
def on_trash(doc): if doc.communication_type != "Comment": return if doc.reference_doctype == "Message": return if (doc.comment_type or "Comment") != "Comment": frappe.only_for("System Manager") _comments = get_comments_from_parent(doc) for c in _comments: if c.get("name")==doc.name: _comments.remove(c) update_comments_in_parent(doc.reference_doctype, doc.reference_name, _comments)
def delete_company_transactions(company_name): frappe.only_for("System Manager") doc = frappe.get_doc("Company", company_name) if frappe.session.user != doc.owner: frappe.throw( _("Transactions can only be deleted by the creator of the Company" ), frappe.PermissionError) delete_bins(company_name) for doctype in frappe.db.sql_list("""select parent from tabDocField where fieldtype='Link' and options='Company'"""): if doctype not in ("Account", "Cost Center", "Warehouse", "Budget Detail", "Party Account"): delete_for_doctype(doctype, company_name)
def get_module_icons_html(user=None): if user != frappe.session.user: frappe.only_for('System Manager') if not user: icons = frappe.db.get_all('Desktop Icon', fields='*', filters={'standard': 1}, order_by='idx') else: frappe.cache().hdel('desktop_icons', user) icons = get_user_icons(user) return frappe.render_template( 'frappe/core/page/modules_setup/includes/module_icons.html', {'icons': icons})
def update(doctype, role, permlevel, ptype, value=None): """Update role permission params Args: doctype (str): Name of the DocType to update params for role (str): Role to be updated for, eg "Website Manager". permlevel (int): perm level the provided rule applies to ptype (str): permission type, example "read", "delete", etc. value (None, optional): value for ptype, None indicates False Returns: str: Refresh flag is permission is updated successfully """ frappe.only_for("System Manager") out = update_permission_property(doctype, role, permlevel, ptype, value) return 'refresh' if out else None
def get_module_icons(user=None): if user != frappe.session.user: frappe.only_for("System Manager") if not user: icons = frappe.db.get_all("Desktop Icon", fields="*", filters={"standard": 1}, order_by="idx") else: frappe.cache().hdel("desktop_icons", user) icons = get_user_icons(user) for icon in icons: icon.value = frappe.db.escape(_(icon.label or icon.module_name)) return {"icons": icons, "user": user}
def replace_abbr(company, old, new): frappe.only_for("System Manager") frappe.db.set_value("Company", company, "abbr", new) def _rename_record(dt): for d in frappe.db.sql( "select name from `tab%s` where company=%s" % (dt, '%s'), company): parts = d[0].split(" - ") if parts[-1].lower() == old.lower(): name_without_abbr = " - ".join(parts[:-1]) frappe.rename_doc(dt, d[0], name_without_abbr + " - " + new) for dt in ["Account", "Cost Center", "Warehouse"]: _rename_record(dt) frappe.db.commit()
def generate_keys(user): """ generate api key and api secret :param user: str """ frappe.only_for("System Manager") user_details = frappe.get_doc("User", user) api_secret = frappe.generate_hash(length=15) # if api key is not set generate api key if not user_details.api_key: api_key = frappe.generate_hash(length=15) user_details.api_key = api_key user_details.api_secret = api_secret user_details.save() return {"api_secret": api_secret}
def get_permissions(doctype=None, role=None): frappe.only_for("System Manager") out = frappe.db.sql( """select * from tabDocPerm where %s%s order by parent, permlevel, role""" % (doctype and (" parent='%s'" % doctype.replace("'", "\'")) or "", role and ((doctype and " and " or "") + " role='%s'" % role.replace("'", "\'")) or ""), as_dict=True) linked_doctypes = {} for d in out: d.linked_doctypes = linked_doctypes.setdefault( d.parent, get_linked_doctypes(d.parent)) return out
def get_roles_and_doctypes(): frappe.only_for("System Manager") send_translations(frappe.get_lang_dict("doctype", "DocPerm")) return { "doctypes": [ d[0] for d in frappe.db.sql("""select name from `tabDocType` dt where ifnull(istable,0)=0 and name not in ('DocType') and exists(select * from `tabDocField` where parent=dt.name)""") ], "roles": [ d[0] for d in frappe.db.sql( """select name from tabRole where name not in ('Guest', 'Administrator')""") ] }
def anonymize_data(self): """ mask user data with non identifiable data """ frappe.only_for('System Manager') if not (self.status == 'Pending Approval'): frappe.throw(_("This request has not yet been approved by the user.")) privacy_docs = frappe.get_hooks("user_privacy_documents") anonymize_value_map = { 'Date': '1111-01-01', 'Int': 0, 'Code': 'http://xxxxx' } regex = re.compile(r"(?<!\.)\b{0}\b(?!\.)".format(re.escape(self.email))) for ref_doc in privacy_docs: meta = frappe.get_meta(ref_doc['doctype']) personal_fields = ref_doc.get('personal_fields', []) if ref_doc.get('applies_to_website_user') and 'Guest' not in frappe.get_roles(self.email): continue anonymize_fields = '' for field in personal_fields: field_details = meta.get_field(field) field_value = anonymize_value_map.get(field_details.fieldtype, str(field)) if not field_details.unique else self.name.split("@")[0] anonymize_fields += ', `{0}`= \'{1}\''.format(field, field_value) docs = frappe.get_all(ref_doc['doctype'], {ref_doc['match_field']:('like', '%'+self.email+'%')}, ['name', ref_doc['match_field']]) for d in docs: if not re.search(regex, d[ref_doc['match_field']]): continue anonymize_match_value = ', '.join(map(lambda x: self.name if re.search(regex, x) else x, d[ref_doc['match_field']].split())) frappe.db.sql("""UPDATE `tab{0}` SET `{1}` = '{2}' {3} WHERE `name` = '{4}' """.format( #nosec ref_doc['doctype'], ref_doc['match_field'], anonymize_match_value, anonymize_fields, d['name'] )) self.db_set('status', 'Deleted')
def get_roles_and_doctypes(): frappe.only_for("System Manager") send_translations(frappe.get_lang_dict("doctype", "DocPerm")) return { "doctypes": [ d[0] for d in frappe.db.sql("""select name from `tabDocType` dt where istable=0 and name not in ('DocType') and exists(select * from `tabDocField` where parent=dt.name) and exists(select * from `tabDocPerm` dp,`tabRole` role where dp.role = role.name and dp.parent=dt.name and not role.disabled)""" ) ], "roles": [ d[0] for d in frappe.db.sql("""select name from tabRole where name != 'Administrator' and disabled=0""") ] }
def replace_abbr(company, old, new): new = new.strip() if not new: frappe.throw(_("Abbr can not be blank or space")) frappe.only_for("System Manager") frappe.db.set_value("Company", company, "abbr", new) def _rename_record(dt): for d in frappe.db.sql("select name from `tab%s` where company=%s" % (dt, '%s'), company): parts = d[0].rsplit(" - ", 1) if len(parts) == 1 or parts[1].lower() == old.lower(): frappe.rename_doc(dt, d[0], parts[0] + " - " + new) for dt in ["Warehouse", "Account", "Cost Center"]: _rename_record(dt) frappe.db.commit()
def get_roles_and_doctypes(): frappe.only_for(("System Manager", "Local Admin")) send_translations(frappe.get_lang_dict("doctype", "DocPerm")) active_domains = frappe.get_active_domains() doctypes = frappe.get_all( "DocType", filters={ "istable": 0, "name": ("not in", ",".join(not_allowed_in_permission_manager)), }, or_filters={ "ifnull(restrict_to_domain, '')": "", "restrict_to_domain": ("in", active_domains) }, fields=["name"]) roles = frappe.get_all("Role", filters={ "name": ("not in", "Administrator", "System Manager"), "disabled": 0, }, or_filters={ "ifnull(restrict_to_domain, '')": "", "restrict_to_domain": ("in", active_domains) }, fields=["name"]) doctypes_list = [{ "label": _(d.get("name")), "value": d.get("name") } for d in doctypes] roles_list = [{ "label": _(d.get("name")), "value": d.get("name") } for d in roles if d.get('name') != "System Manager"] return { "doctypes": sorted(doctypes_list, key=lambda d: d['label']), "roles": sorted(roles_list, key=lambda d: d['label']) }
def replace_abbr(company, old, new): new = new.strip() if not new: frappe.throw(_("Abbr can not be blank or space")) frappe.only_for("System Manager") frappe.db.set_value("Company", company, "abbr", new) def _rename_record(doc): parts = doc[0].rsplit(" - ", 1) if len(parts) == 1 or parts[1].lower() == old.lower(): frappe.rename_doc(dt, doc[0], parts[0] + " - " + new) def _rename_records(dt): # rename is expensive so let's be economical with memory usage doc = (d for d in frappe.db.sql("select name from `tab%s` where company=%s" % (dt, '%s'), company)) for d in doc: _rename_record(d)
def run(self): frappe.only_for("System Manager") try: frappe.debug_log = [] safe_exec(self.console) self.output = "\n".join(frappe.debug_log) except: # noqa: E722 self.output = frappe.get_traceback() if self.commit: frappe.db.commit() else: frappe.db.rollback() frappe.get_doc( dict(doctype="Console Log", script=self.console, output=self.output)).insert() frappe.db.commit()
def fetch_latest_backups(partial=False): """Fetches paths of the latest backup taken in the last 30 days Only for: System Managers Returns: dict: relative Backup Paths """ frappe.only_for("System Manager") odb = BackupGenerator( frappe.conf.db_name, frappe.conf.db_name, frappe.conf.db_password, db_host=frappe.db.host, db_type=frappe.conf.db_type, db_port=frappe.conf.db_port, ) database, public, private, config = odb.get_recent_backup(older_than=24 * 30, partial=partial) return {"database": database, "public": public, "private": private, "config": config}