def get_content_from_path(self, path, content_api: ContentApi, workspace: Workspace) -> Content: """ Called whenever we want to get the Content item from the database for a given path """ path = self.reduce_path(path) parent_path = dirname(path) relative_parents_path = parent_path[len(workspace.label) + 1:] parents = relative_parents_path.split('/') try: parents.remove('') except ValueError: pass parents = [transform_to_bdd(x) for x in parents] try: return content_api.get_one_by_label_and_parent_labels( content_label=transform_to_bdd(basename(path)), content_parent_labels=parents, workspace=workspace, ) except NoResultFound: return None
def move_folder(self, destpath): workspace_api = WorkspaceApi( current_user=self.user, session=self.session, config=self.provider.app_config, ) workspace = self.provider.get_workspace_from_path( normpath(destpath), workspace_api ) parent = self.provider.get_parent_from_path( normpath(destpath), self.content_api, workspace ) with new_revision( content=self.content, tm=transaction.manager, session=self.session, ): if basename(destpath) != self.getDisplayName(): self.content_api.update_content(self.content, transform_to_bdd(basename(destpath))) self.content_api.save(self.content) else: if workspace.workspace_id == self.content.workspace.workspace_id: self.content_api.move(self.content, parent) else: self.content_api.move_recursively(self.content, parent, workspace) transaction.commit()
def copyMoveSingle(self, destpath, isMove): if isMove: # INFO - G.M - 12-03-2018 - This case should not happen # As far as moveRecursive method exist, all move should not go # through this method. If such case appear, try replace this to : #### # self.move_file(destpath) # return #### raise NotImplemented new_file_name = None new_file_extension = None # Inspect destpath if basename(destpath) != self.getDisplayName(): new_given_file_name = transform_to_bdd(basename(destpath)) new_file_name, new_file_extension = \ os.path.splitext(new_given_file_name) workspace_api = WorkspaceApi( current_user=self.user, session=self.session, config=self.provider.app_config, ) content_api = ContentApi( current_user=self.user, session=self.session, config=self.provider.app_config ) destination_workspace = self.provider.get_workspace_from_path( destpath, workspace_api, ) destination_parent = self.provider.get_parent_from_path( destpath, content_api, destination_workspace, ) workspace = self.content.workspace parent = self.content.parent new_content = self.content_api.copy( item=self.content, new_label=new_file_name, new_parent=destination_parent, ) self.content_api.copy_children(self.content, new_content) transaction.commit()
def get_content_from_path(self, path, content_api: ContentApi, workspace: Workspace) -> Content: """ Called whenever we want to get the Content item from the database for a given path """ path = self.reduce_path(path) parent_path = dirname(path) relative_parents_path = parent_path[len(workspace.label)+1:] parents = relative_parents_path.split('/') try: parents.remove('') except ValueError: pass parents = [transform_to_bdd(x) for x in parents] try: return content_api.get_one_by_label_and_parent_labels( content_label=transform_to_bdd(basename(path)), content_parent_labels=parents, workspace=workspace, ) except NoResultFound: return None
def move_file(self, destpath): workspace = self.content.workspace parent = self.content.parent with new_revision(self.content): if basename(destpath) != self.getDisplayName(): new_given_file_name = transform_to_bdd(basename(destpath)) new_file_name, new_file_extension = \ os.path.splitext(new_given_file_name) self.content_api.update_content( self.content, new_file_name, ) self.content.file_extension = new_file_extension self.content_api.save(self.content) else: workspace_api = WorkspaceApi(self.user) content_api = ContentApi(self.user) destination_workspace = self.provider.get_workspace_from_path( destpath, workspace_api, ) destination_parent = self.provider.get_parent_from_path( destpath, content_api, destination_workspace, ) self.content_api.move( item=self.content, new_parent=destination_parent, must_stay_in_same_workspace=False, new_workspace=destination_workspace ) transaction.commit()
def move_file(self, destpath): workspace = self.content.workspace parent = self.content.parent with new_revision(self.content): if basename(destpath) != self.getDisplayName(): new_given_file_name = transform_to_bdd(basename(destpath)) new_file_name, new_file_extension = \ os.path.splitext(new_given_file_name) self.content_api.update_content( self.content, new_file_name, ) self.content.file_extension = new_file_extension self.content_api.save(self.content) else: workspace_api = WorkspaceApi(self.user) content_api = ContentApi(self.user) destination_workspace = self.provider.get_workspace_from_path( destpath, workspace_api, ) destination_parent = self.provider.get_parent_from_path( destpath, content_api, destination_workspace, ) self.content_api.move(item=self.content, new_parent=destination_parent, must_stay_in_same_workspace=False, new_workspace=destination_workspace) transaction.commit()
def move_folder(self, destpath): workspace_api = WorkspaceApi(self.user) workspace = self.provider.get_workspace_from_path( normpath(destpath), workspace_api ) parent = self.provider.get_parent_from_path( normpath(destpath), self.content_api, workspace ) with new_revision(self.content): if basename(destpath) != self.getDisplayName(): self.content_api.update_content(self.content, transform_to_bdd(basename(destpath))) self.content_api.save(self.content) else: if workspace.workspace_id == self.content.workspace.workspace_id: self.content_api.move(self.content, parent) else: self.content_api.move_recursively(self.content, parent, workspace) transaction.commit()
def get_workspace_from_path(self, path: str, api: WorkspaceApi) -> Workspace: try: return api.get_one_by_label(transform_to_bdd(path.split('/')[1])) except NoResultFound: return None
def move_file(self, destpath: str) -> None: """ Move file mean changing the path to access to a file. This can mean simple renaming(1), moving file from a directory to one another(2) but also renaming + moving file from a directory to one another at the same time (3). (1): move /dir1/file1 -> /dir1/file2 (2): move /dir1/file1 -> /dir2/file1 (3): move /dir1/file1 -> /dir2/file2 :param destpath: destination path of webdav move :return: nothing """ workspace = self.content.workspace parent = self.content.parent with new_revision( content=self.content, tm=transaction.manager, session=self.session, ): # INFO - G.M - 2018-03-09 - First, renaming file if needed if basename(destpath) != self.getDisplayName(): new_given_file_name = transform_to_bdd(basename(destpath)) new_file_name, new_file_extension = \ os.path.splitext(new_given_file_name) self.content_api.update_content( self.content, new_file_name, ) self.content.file_extension = new_file_extension self.content_api.save(self.content) # INFO - G.M - 2018-03-09 - Moving file if needed workspace_api = WorkspaceApi( current_user=self.user, session=self.session, config=self.provider.app_config, ) content_api = ContentApi( current_user=self.user, session=self.session, config=self.provider.app_config ) destination_workspace = self.provider.get_workspace_from_path( destpath, workspace_api, ) destination_parent = self.provider.get_parent_from_path( destpath, content_api, destination_workspace, ) if destination_parent != parent or destination_workspace != workspace: # nopep8 # INFO - G.M - 12-03-2018 - Avoid moving the file "at the same place" # nopep8 # if the request does not result in a real move. self.content_api.move( item=self.content, new_parent=destination_parent, must_stay_in_same_workspace=False, new_workspace=destination_workspace ) transaction.commit()