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):
|
def createSparseFile(self, inner_path, size, sha512=None):
|
||||||
file_path = self.getPath(inner_path)
|
file_path = self.getPath(inner_path)
|
||||||
|
|
||||||
file_dir = os.path.dirname(file_path)
|
self.ensureDir(os.path.dirname(file_path))
|
||||||
if not os.path.isdir(file_dir):
|
|
||||||
os.makedirs(file_dir)
|
|
||||||
|
|
||||||
f = open(file_path, 'wb')
|
f = open(file_path, 'wb')
|
||||||
f.truncate(min(1024 * 1024 * 5, size)) # Only pre-allocate up to 5MB
|
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)
|
file_path = self.getPath(inner_path)
|
||||||
|
|
||||||
# Create dir if not exist
|
# Create dir if not exist
|
||||||
file_dir = os.path.dirname(file_path)
|
self.ensureDir(os.path.dirname(inner_path))
|
||||||
if not os.path.isdir(file_dir):
|
|
||||||
os.makedirs(file_dir)
|
|
||||||
|
|
||||||
if not os.path.isfile(file_path):
|
if not os.path.isfile(file_path):
|
||||||
file_info = self.site.content_manager.getFileInfo(inner_path)
|
file_info = self.site.content_manager.getFileInfo(inner_path)
|
||||||
|
|
|
@ -3,6 +3,7 @@ import re
|
||||||
import shutil
|
import shutil
|
||||||
import json
|
import json
|
||||||
import time
|
import time
|
||||||
|
import errno
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
|
||||||
import sqlite3
|
import sqlite3
|
||||||
|
@ -225,13 +226,22 @@ class SiteStorage(object):
|
||||||
raise err
|
raise err
|
||||||
return res
|
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
|
# Open file object
|
||||||
def open(self, inner_path, mode="rb", create_dirs=False, **kwargs):
|
def open(self, inner_path, mode="rb", create_dirs=False, **kwargs):
|
||||||
file_path = self.getPath(inner_path)
|
file_path = self.getPath(inner_path)
|
||||||
if create_dirs:
|
if create_dirs:
|
||||||
file_dir = os.path.dirname(file_path)
|
file_inner_dir = os.path.dirname(inner_path)
|
||||||
if not os.path.isdir(file_dir):
|
self.ensureDir(file_inner_dir)
|
||||||
os.makedirs(file_dir)
|
|
||||||
return open(file_path, mode, **kwargs)
|
return open(file_path, mode, **kwargs)
|
||||||
|
|
||||||
# Open file object
|
# Open file object
|
||||||
|
@ -243,9 +253,7 @@ class SiteStorage(object):
|
||||||
def writeThread(self, inner_path, content):
|
def writeThread(self, inner_path, content):
|
||||||
file_path = self.getPath(inner_path)
|
file_path = self.getPath(inner_path)
|
||||||
# Create dir if not exist
|
# Create dir if not exist
|
||||||
file_dir = os.path.dirname(file_path)
|
self.ensureDir(os.path.dirname(inner_path))
|
||||||
if not os.path.isdir(file_dir):
|
|
||||||
os.makedirs(file_dir)
|
|
||||||
# Write file
|
# Write file
|
||||||
if hasattr(content, 'read'): # File-like object
|
if hasattr(content, 'read'): # File-like object
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue