Use thread-safe mode to create directories
This commit is contained in:
parent
1be56b5a39
commit
2a402a0674
2 changed files with 16 additions and 12 deletions
|
@ -406,9 +406,7 @@ class SiteStoragePlugin(object):
|
|||
def createSparseFile(self, inner_path, size, sha512=None):
|
||||
file_path = self.getPath(inner_path)
|
||||
|
||||
file_dir = os.path.dirname(file_path)
|
||||
if not os.path.isdir(file_dir):
|
||||
os.makedirs(file_dir)
|
||||
self.ensureDir(os.path.dirname(file_path))
|
||||
|
||||
f = open(file_path, 'wb')
|
||||
f.truncate(min(1024 * 1024 * 5, size)) # Only pre-allocate up to 5MB
|
||||
|
@ -432,9 +430,7 @@ class SiteStoragePlugin(object):
|
|||
file_path = self.getPath(inner_path)
|
||||
|
||||
# Create dir if not exist
|
||||
file_dir = os.path.dirname(file_path)
|
||||
if not os.path.isdir(file_dir):
|
||||
os.makedirs(file_dir)
|
||||
self.ensureDir(os.path.dirname(inner_path))
|
||||
|
||||
if not os.path.isfile(file_path):
|
||||
file_info = self.site.content_manager.getFileInfo(inner_path)
|
||||
|
|
|
@ -3,6 +3,7 @@ import re
|
|||
import shutil
|
||||
import json
|
||||
import time
|
||||
import errno
|
||||
from collections import defaultdict
|
||||
|
||||
import sqlite3
|
||||
|
@ -225,13 +226,22 @@ class SiteStorage(object):
|
|||
raise err
|
||||
return res
|
||||
|
||||
def ensureDir(self, inner_path):
|
||||
try:
|
||||
os.makedirs(self.getPath(inner_path))
|
||||
except OSError as err:
|
||||
if err.errno == errno.EEXIST:
|
||||
return False
|
||||
else:
|
||||
raise err
|
||||
return True
|
||||
|
||||
# Open file object
|
||||
def open(self, inner_path, mode="rb", create_dirs=False, **kwargs):
|
||||
file_path = self.getPath(inner_path)
|
||||
if create_dirs:
|
||||
file_dir = os.path.dirname(file_path)
|
||||
if not os.path.isdir(file_dir):
|
||||
os.makedirs(file_dir)
|
||||
file_inner_dir = os.path.dirname(inner_path)
|
||||
self.ensureDir(file_inner_dir)
|
||||
return open(file_path, mode, **kwargs)
|
||||
|
||||
# Open file object
|
||||
|
@ -243,9 +253,7 @@ class SiteStorage(object):
|
|||
def writeThread(self, inner_path, content):
|
||||
file_path = self.getPath(inner_path)
|
||||
# Create dir if not exist
|
||||
file_dir = os.path.dirname(file_path)
|
||||
if not os.path.isdir(file_dir):
|
||||
os.makedirs(file_dir)
|
||||
self.ensureDir(os.path.dirname(inner_path))
|
||||
# Write file
|
||||
if hasattr(content, 'read'): # File-like object
|
||||
|
||||
|
|
Loading…
Reference in a new issue