def copyAllSubFolders(folder, target_folder): #TODO Need to copy subfolders tree contents logging.info('copyAllSubFolder(): Start') #Create new folder element to copy the folder new_folder = Folder(parent=genFolderParentKey()) #Copy the folder to new folder logging.info('copyAllSubFolders: copying folder |' + folder.name + '| to: |' + target_folder.name) new_folder.populate( **folder.to_dict() ) #to_dict returns the dictionary of 'folder' and '.populate()' will save the value pairs to new folder #change necessary parameters new_folder.parent_folder = target_folder.key #parent of new folder should be the target folder new_folder.date_c = datetime.datetime.now() new_folder.date_m = datetime.datetime.now() new_folder.path = target_folder.path + new_folder.name + '/' #path is calcuated from the give target folder's path #save new folder new_folder.put() #find and copy files in this folder subLinks = Link.query(Link.parent_folder == folder.key).fetch() for subLink in subLinks: logging.info("Copying Link: " + subLink.name) #Create new link new_link = Link(parent=genLinkParentKey()) #Copy the links to new folder logging.info('copyAllSubFolders: copying file |' + subLink.name + '| to: |' + target_folder.name) new_link.populate( **subLink.to_dict() ) #to_dict returns the dictionary of 'subLink' and '.populate()' will save the value pairs to new link new_link.parent_folder = new_folder.key #parent of new folder should be the one provided by the user new_link.date_c = datetime.datetime.now() new_link.date_m = datetime.datetime.now() new_link.path = new_folder.path #save new link new_link.put() #find and copy the subfolders in this folder subfolders = Folder.query(Folder.parent_folder == folder.key).fetch() for subfolder in subfolders: copyAllSubFolders(subfolder, new_folder) return "success"
def addFolder(params): logging.info('addFolder(): Start') folder = Folder(parent=genFolderParentKey( )) #Create a datastore entity with parent as the key generated above #assign form data to entity properties if 'name' in params: folder.name = params['name'] else: folder.name = 'Folder' if 'icon' in params: folder.icon = params['icon'] else: folder.icon = '/images/folder-icon.png' if 'color' in params: folder.color = params['color'] else: folder.color = 'Default' folder.date_c = datetime.datetime.now() folder.date_m = datetime.datetime.now() folder.n_items = 0 #this value needs to be calculated and populated. if 'view' in params: folder.view = params['view'] else: folder.view = 'Default' if 'parent_folder_key' in params: folder.parent_folder = params['parent_folder_key'] folder.path = params['parent_folder_key'].get( ).path + folder.name + '/' #calculate path from parent folder and save - parent folder path + my name #increment parent folder's items count and save. Do it only if current folder is not root, params['parent_folder_key'].get().n_items += 1 params['parent_folder_key'].get().put() #TODO if no parent folder mentioned, set parent as links logging.info('Adding Folder - ' + folder.name) new_folder_key = folder.put() #save the folder and capture the key return new_folder_key # return the folder key
def addRootFolder(): logging.info('addRootFolder(): Start') folder = Folder(parent=genFolderParentKey( )) #Create a datastore entity with parent as the key generated above #No need of param checks as the call is guaranteed to be internal. folder.name = "root" folder.icon = None folder.color = None folder.date_c = datetime.datetime.now() folder.date_m = datetime.datetime.now() folder.n_items = 0 #this value needs to be calculated and populated. folder.view = None folder.path = '/' folder.parent_folder = None return folder.put()