Блокировка каталога при загрузке в него - PullRequest
1 голос
/ 22 июля 2011

Я думал об обновлении имени каталога с помощью имени пользователя и даты и времени, когда пользователь загружает в него файлы.Чтобы на нем отображалась самая новая загрузка от пользователя.У меня есть функция загрузки и переименование, например, так:

# Check if form is valid and upload   
    if form.is_valid():
        form.save(request.FILES, request)
    # Edit the previous folder to have new datetime and user marking if the folder has such.
    currentPath = post_data.get('path').encode("utf-8")
    prevfolder = os.path.basename(post_data.get('path').encode("utf-8"))
    try:
        casename, rest = prevfolder.split(" [",1)
    #print(casename)
        dest = renameOnUpload(request,currentPath, casename)
    except:
        dest = form.path

        return HttpResponseRedirect('/fm/list/%s' % dest)

def renameOnUpload(request,path,casename):
    datetime_string = get_currenttime()
    user_string = " ["+ request.user.username + "]"
    newcasename = casename+user_string.encode("utf-8")+datetime_string
    dest = os.path.join(os.path.dirname(path), newcasename)
    if not path == dest:
        fmoper.move(path, dest)
    else:
        dest = path
    return dest

fmoper.move

def move(src, dst, replace=False):
    ensure_dir(dst)             # Ensure that we have a destination folder, if not create it. 
    if not replace and os.path.exists(dst):
        dst = existname(dst)
    return shutil.move(src, dst)

Так что он загружает файлы и делает ход после.Это вызывает проблемы, когда пользователь загружает файл, а другой загружает его одновременно, переименовывая папку в процессе, вызывая загрузку одним загрузчиком в несуществующую папку.

Есть ли какой-то аккуратный способ, которым я мог бызаблокировать папку, когда пользователь загружает в нее?currentPath - это папка, загруженная и переименованная в папку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...