def create_folder(folder, parent): """Make sure the folder exists and return it's name.""" new_folder_name = "/".join([parent, folder]) if not frappe.db.exists("File", new_folder_name): create_new_folder(folder, parent) return new_folder_name
def create_folder(folder, parent): """Make sure the folder exists and return it's name.""" from frappe.core.doctype.file.file import create_new_folder try: create_new_folder(folder, parent) except frappe.DuplicateEntryError: pass return "/".join([parent, folder])
def create_folder(folder,parent): from frappe.core.doctype.file.file import create_new_folder new_folder_name="/".join([parent, folder]) if not frappe.db.exists("File",new_folder_name): create_new_folder(folder,parent) return new_folder_name
def create_folder(folder, parent): """Make sure the folder exists and return it's name.""" from frappe.core.doctype.file.file import create_new_folder new_folder_name = "/".join([parent, folder]) if not frappe.db.exists("File", new_folder_name): create_new_folder(folder, parent) return new_folder_name
def after_install(): if not frappe.get_all("File", filters={ "folder": "Home", "file_name": "Projects", "is_folder": 1 }, limit=1): create_new_folder("Projects", "Home") frappe.db.commit()
def test_of_not_of_descendant_ancestors(self): clear_user_permissions_for_doctype("File") delete_test_file_hierarchy() # delete already existing folders from frappe.core.doctype.file.file import create_new_folder create_new_folder('level1-A', 'Home') create_new_folder('level2-A', 'Home/level1-A') create_new_folder('level2-B', 'Home/level1-A') create_new_folder('level3-A', 'Home/level1-A/level2-A') create_new_folder('level1-B', 'Home') create_new_folder('level2-A', 'Home/level1-B') # in descendants filter data = frappe.get_all( 'File', {'name': ('descendants of', 'Home/level1-A/level2-A')}) self.assertTrue({"name": "Home/level1-A/level2-A/level3-A"} in data) data = frappe.get_all('File', {'name': ('descendants of', 'Home/level1-A')}) self.assertTrue({"name": "Home/level1-A/level2-A/level3-A"} in data) self.assertTrue({"name": "Home/level1-A/level2-A"} in data) self.assertTrue({"name": "Home/level1-A/level2-B"} in data) self.assertFalse({"name": "Home/level1-B"} in data) self.assertFalse({"name": "Home/level1-A"} in data) self.assertFalse({"name": "Home"} in data) # in ancestors of filter data = frappe.get_all( 'File', {'name': ('ancestors of', 'Home/level1-A/level2-A')}) self.assertFalse({"name": "Home/level1-A/level2-A/level3-A"} in data) self.assertFalse({"name": "Home/level1-A/level2-A"} in data) self.assertFalse({"name": "Home/level1-A/level2-B"} in data) self.assertFalse({"name": "Home/level1-B"} in data) self.assertTrue({"name": "Home/level1-A"} in data) self.assertTrue({"name": "Home"} in data) data = frappe.get_all('File', {'name': ('ancestors of', 'Home/level1-A')}) self.assertFalse({"name": "Home/level1-A/level2-A/level3-A"} in data) self.assertFalse({"name": "Home/level1-A/level2-A"} in data) self.assertFalse({"name": "Home/level1-A/level2-B"} in data) self.assertFalse({"name": "Home/level1-B"} in data) self.assertFalse({"name": "Home/level1-A"} in data) self.assertTrue({"name": "Home"} in data) # not descendants filter data = frappe.get_all( 'File', {'name': ('not descendants of', 'Home/level1-A/level2-A')}) self.assertFalse({"name": "Home/level1-A/level2-A/level3-A"} in data) self.assertTrue({"name": "Home/level1-A/level2-A"} in data) self.assertTrue({"name": "Home/level1-A/level2-B"} in data) self.assertTrue({"name": "Home/level1-A"} in data) self.assertTrue({"name": "Home"} in data) data = frappe.get_all( 'File', {'name': ('not descendants of', 'Home/level1-A')}) self.assertFalse({"name": "Home/level1-A/level2-A/level3-A"} in data) self.assertFalse({"name": "Home/level1-A/level2-A"} in data) self.assertFalse({"name": "Home/level1-A/level2-B"} in data) self.assertTrue({"name": "Home/level1-B"} in data) self.assertTrue({"name": "Home/level1-A"} in data) self.assertTrue({"name": "Home"} in data) # not ancestors of filter data = frappe.get_all( 'File', {'name': ('not ancestors of', 'Home/level1-A/level2-A')}) self.assertTrue({"name": "Home/level1-A/level2-A/level3-A"} in data) self.assertTrue({"name": "Home/level1-A/level2-A"} in data) self.assertTrue({"name": "Home/level1-A/level2-B"} in data) self.assertTrue({"name": "Home/level1-B"} in data) self.assertTrue({"name": "Home/level1-A"} not in data) self.assertTrue({"name": "Home"} not in data) data = frappe.get_all('File', {'name': ('not ancestors of', 'Home/level1-A')}) self.assertTrue({"name": "Home/level1-A/level2-A/level3-A"} in data) self.assertTrue({"name": "Home/level1-A/level2-A"} in data) self.assertTrue({"name": "Home/level1-A/level2-B"} in data) self.assertTrue({"name": "Home/level1-B"} in data) self.assertTrue({"name": "Home/level1-A"} in data) self.assertFalse({"name": "Home"} in data) data = frappe.get_all('File', {'name': ('ancestors of', 'Home')}) self.assertTrue(len(data) == 0) self.assertTrue( len(frappe.get_all('File', {'name': ( 'not ancestors of', 'Home')})) == len(frappe.get_all('File')))
def test_nested_permission(self): clear_user_permissions_for_doctype("File") delete_test_file_hierarchy() # delete already existing folders from frappe.core.doctype.file.file import create_new_folder frappe.set_user('Administrator') create_new_folder('level1-A', 'Home') create_new_folder('level2-A', 'Home/level1-A') create_new_folder('level2-B', 'Home/level1-A') create_new_folder('level3-A', 'Home/level1-A/level2-A') create_new_folder('level1-B', 'Home') create_new_folder('level2-A', 'Home/level1-B') # user permission for only one root folder add_user_permission('File', 'Home/level1-A', '*****@*****.**') from frappe.core.page.permission_manager.permission_manager import update update('File', 'All', 0, 'if_owner', 0) # to avoid if_owner filter frappe.set_user('*****@*****.**') data = DatabaseQuery("File").execute() # children of root folder (for which we added user permission) should be accessible self.assertTrue({"name": "Home/level1-A/level2-A"} in data) self.assertTrue({"name": "Home/level1-A/level2-B"} in data) self.assertTrue({"name": "Home/level1-A/level2-A/level3-A"} in data) # other folders should not be accessible self.assertFalse({"name": "Home/level1-B"} in data) self.assertFalse({"name": "Home/level1-B/level2-B"} in data) update('File', 'All', 0, 'if_owner', 1) frappe.set_user('Administrator')
def after_install(): # noqa: D103 folder = 'Home/Attachments' foldername = 'FinTS' if not frappe.db.exists('File', {'name': "/".join([folder, foldername])}): create_new_folder(foldername, folder)
def test_create_new_folder(self): from frappe.core.doctype.file.file import create_new_folder folder = create_new_folder('test_folder', 'Home') self.assertTrue(folder.is_folder)
def upload_document(): docname = frappe.form_dict.docname fieldname = frappe.form_dict.folder validate_document_fieldname(fieldname) project_name, project_timeline, client_view = frappe.db.get_value( "Project Document", docname, ['parent', 'project_timeline', 'client_view']) check_project_user_permission(project_name) check_project_timeline_permission(project_timeline, 'write') check_client_view_permission(client_view) if not frappe.get_all("File", filters={ "folder": "Home", "file_name": "Projects", "is_folder": 1 }, limit=1): create_new_folder("Projects", "Home") if not frappe.get_all("File", filters={ "folder": "Home/Projects", "file_name": project_name, "is_folder": 1 }, limit=1): create_new_folder(project_name, "Home/Projects") if not frappe.get_all("File", filters={ "folder": "Home/Projects/{0}".format(project_name), "file_name": "Attachments", "is_folder": 1 }, limit=1): create_new_folder("Attachments", "Home/Projects/{0}".format(project_name)) file_doc = frappe.get_doc({ "doctype": "File", "attached_to_doctype": "Project", "attached_to_name": project_name, "folder": 'Home/Projects/{0}/Attachments'.format(project_name), "file_name": frappe.local.uploaded_filename, "file_url": frappe.form_dict.file_url, "is_private": 1, "content": frappe.local.uploaded_file }) file_doc.save() file_url = file_doc.file_url project = frappe.get_doc("Project", project_name) document_row = project.get("documents", filters={"name": docname}) if not document_row: frappe.throw(_("Invalid Document Selected")) document_row = document_row[0] if document_row.get(fieldname): frappe.throw(_("Document is already uploaded")) document_row.set(fieldname, file_url) document_row.set(fieldname + "_date", frappe.utils.today()) project.save() frappe.msgprint( _("{0} document {1} version {2} {3} has been successfully uploaded"). format(document_row.project_timeline, frappe.bold(document_row.document_name), document_row.document_version, frappe.unscrub(fieldname))) return file_doc
def test_of_not_of_descendant_ancestors(self): clear_user_permissions_for_doctype("File") delete_test_file_hierarchy() # delete already existing folders from frappe.core.doctype.file.file import create_new_folder create_new_folder('level1-A', 'Home') create_new_folder('level2-A', 'Home/level1-A') create_new_folder('level2-B', 'Home/level1-A') create_new_folder('level3-A', 'Home/level1-A/level2-A') create_new_folder('level1-B', 'Home') create_new_folder('level2-A', 'Home/level1-B') # in descendants filter data = frappe.get_all('File', {'name': ('descendants of', 'Home/level1-A/level2-A')}) self.assertTrue({"name": "Home/level1-A/level2-A/level3-A"} in data) data = frappe.get_all('File', {'name': ('descendants of', 'Home/level1-A')}) self.assertTrue({"name": "Home/level1-A/level2-A/level3-A"} in data) self.assertTrue({"name": "Home/level1-A/level2-A"} in data) self.assertTrue({"name": "Home/level1-A/level2-B"} in data) self.assertFalse({"name": "Home/level1-B"} in data) self.assertFalse({"name": "Home/level1-A"} in data) self.assertFalse({"name": "Home"} in data) # in ancestors of filter data = frappe.get_all('File', {'name': ('ancestors of', 'Home/level1-A/level2-A')}) self.assertFalse({"name": "Home/level1-A/level2-A/level3-A"} in data) self.assertFalse({"name": "Home/level1-A/level2-A"} in data) self.assertFalse({"name": "Home/level1-A/level2-B"} in data) self.assertFalse({"name": "Home/level1-B"} in data) self.assertTrue({"name": "Home/level1-A"} in data) self.assertTrue({"name": "Home"} in data) data = frappe.get_all('File', {'name': ('ancestors of', 'Home/level1-A')}) self.assertFalse({"name": "Home/level1-A/level2-A/level3-A"} in data) self.assertFalse({"name": "Home/level1-A/level2-A"} in data) self.assertFalse({"name": "Home/level1-A/level2-B"} in data) self.assertFalse({"name": "Home/level1-B"} in data) self.assertFalse({"name": "Home/level1-A"} in data) self.assertTrue({"name": "Home"} in data) # not descendants filter data = frappe.get_all('File', {'name': ('not descendants of', 'Home/level1-A/level2-A')}) self.assertFalse({"name": "Home/level1-A/level2-A/level3-A"} in data) self.assertTrue({"name": "Home/level1-A/level2-A"} in data) self.assertTrue({"name": "Home/level1-A/level2-B"} in data) self.assertTrue({"name": "Home/level1-A"} in data) self.assertTrue({"name": "Home"} in data) data = frappe.get_all('File', {'name': ('not descendants of', 'Home/level1-A')}) self.assertFalse({"name": "Home/level1-A/level2-A/level3-A"} in data) self.assertFalse({"name": "Home/level1-A/level2-A"} in data) self.assertFalse({"name": "Home/level1-A/level2-B"} in data) self.assertTrue({"name": "Home/level1-B"} in data) self.assertTrue({"name": "Home/level1-A"} in data) self.assertTrue({"name": "Home"} in data) # not ancestors of filter data = frappe.get_all('File', {'name': ('not ancestors of', 'Home/level1-A/level2-A')}) self.assertTrue({"name": "Home/level1-A/level2-A/level3-A"} in data) self.assertTrue({"name": "Home/level1-A/level2-A"} in data) self.assertTrue({"name": "Home/level1-A/level2-B"} in data) self.assertTrue({"name": "Home/level1-B"} in data) self.assertTrue({"name": "Home/level1-A"} not in data) self.assertTrue({"name": "Home"} not in data) data = frappe.get_all('File', {'name': ('not ancestors of', 'Home/level1-A')}) self.assertTrue({"name": "Home/level1-A/level2-A/level3-A"} in data) self.assertTrue({"name": "Home/level1-A/level2-A"} in data) self.assertTrue({"name": "Home/level1-A/level2-B"} in data) self.assertTrue({"name": "Home/level1-B"} in data) self.assertTrue({"name": "Home/level1-A"} in data) self.assertFalse({"name": "Home"} in data) data = frappe.get_all('File', {'name': ('ancestors of', 'Home')}) self.assertTrue(len(data) == 0) self.assertTrue(len(frappe.get_all('File', {'name': ('not ancestors of', 'Home')})) == len(frappe.get_all('File')))