Server IP : 127.0.0.2 / Your IP : 13.59.234.246 Web Server : Apache/2.4.18 (Ubuntu) System : User : www-data ( ) PHP Version : 7.0.33-0ubuntu0.16.04.16 Disable Function : disk_free_space,disk_total_space,diskfreespace,dl,exec,fpaththru,getmyuid,getmypid,highlight_file,ignore_user_abord,leak,listen,link,opcache_get_configuration,opcache_get_status,passthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,php_uname,phpinfo,posix_ctermid,posix_getcwd,posix_getegid,posix_geteuid,posix_getgid,posix_getgrgid,posix_getgrnam,posix_getgroups,posix_getlogin,posix_getpgid,posix_getpgrp,posix_getpid,posix,_getppid,posix_getpwnam,posix_getpwuid,posix_getrlimit,posix_getsid,posix_getuid,posix_isatty,posix_kill,posix_mkfifo,posix_setegid,posix_seteuid,posix_setgid,posix_setpgid,posix_setsid,posix_setuid,posix_times,posix_ttyname,posix_uname,pclose,popen,proc_open,proc_close,proc_get_status,proc_nice,proc_terminate,shell_exec,source,show_source,system,virtual MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /usr/share/doc/python-webdav/ |
Upload File : |
Walker methods -------------- In the COPY, DELETE and MOVE methods we need to walk over a tree of resources and collections in order to copy, delete or move them. The difference between all these walks is only that we perform a different action on the resources we visit. Thus it might be the simplest solution to provide a walker class or method to do that work and give it a function to perform before starting. Way of walking -------------- When we delete things we should do it bottom up but when we copy or move things we should create resources top down. Thus we actually need 2 methods. But the following method might work: We create a list of all the nodes in the tree in tree order (means top down, left to right). When we walk over this list from begin to end we can copy and when we move backwards we can delete. Thus we need an indicator for the direction and the method to perform on it. Here the iterative approach (in order to save memory): dc = dataclass queue = list = [start_uri] while len(queue): element = queue[-1] childs = dc.get_childs(element) if childs: list = list + childs # update queue del queue[-1] if childs: queue = queue + childs (first try..)