Skip to content

Commit

Permalink
[Hardening] Making "os.makedirs" safe to errors
Browse files Browse the repository at this point in the history
  • Loading branch information
afabiani committed Apr 8, 2022
1 parent c2a6399 commit 63d03ce
Show file tree
Hide file tree
Showing 4 changed files with 26 additions and 26 deletions.
26 changes: 13 additions & 13 deletions geonode/br/management/commands/backup.py
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ def execute_backup(self, **options):
dir_time_suffix = get_dir_time_suffix()
target_folder = os.path.join(backup_dir, dir_time_suffix)
if not os.path.exists(target_folder):
os.makedirs(target_folder)
os.makedirs(target_folder, exist_ok=True)
# Temporary folder to store backup files. It will be deleted at the end.
os.chmod(target_folder, 0o777)

Expand Down Expand Up @@ -169,7 +169,7 @@ def execute_backup(self, **options):
media_root = settings.MEDIA_ROOT
media_folder = os.path.join(target_folder, utils.MEDIA_ROOT)
if not os.path.exists(media_folder):
os.makedirs(media_folder)
os.makedirs(media_folder, exist_ok=True)

copy_tree(media_root, media_folder,
ignore=utils.ignore_time(config.gs_data_dt_filter[0], config.gs_data_dt_filter[1]))
Expand All @@ -179,7 +179,7 @@ def execute_backup(self, **options):
static_root = settings.STATIC_ROOT
static_folder = os.path.join(target_folder, utils.STATIC_ROOT)
if not os.path.exists(static_folder):
os.makedirs(static_folder)
os.makedirs(static_folder, exist_ok=True)

copy_tree(static_root, static_folder,
ignore=utils.ignore_time(config.gs_data_dt_filter[0], config.gs_data_dt_filter[1]))
Expand All @@ -189,7 +189,7 @@ def execute_backup(self, **options):
static_folders = settings.STATICFILES_DIRS
static_files_folders = os.path.join(target_folder, utils.STATICFILES_DIRS)
if not os.path.exists(static_files_folders):
os.makedirs(static_files_folders)
os.makedirs(static_files_folders, exist_ok=True)

for static_files_folder in static_folders:

Expand All @@ -204,7 +204,7 @@ def execute_backup(self, **options):
static_folder = os.path.join(static_files_folders,
os.path.basename(os.path.normpath(static_files_folder)))
if not os.path.exists(static_folder):
os.makedirs(static_folder)
os.makedirs(static_folder, exist_ok=True)

copy_tree(static_files_folder, static_folder,
ignore=utils.ignore_time(config.gs_data_dt_filter[0], config.gs_data_dt_filter[1]))
Expand All @@ -221,7 +221,7 @@ def execute_backup(self, **options):
pass
template_files_folders = os.path.join(target_folder, utils.TEMPLATE_DIRS)
if not os.path.exists(template_files_folders):
os.makedirs(template_files_folders)
os.makedirs(template_files_folders, exist_ok=True)

for template_files_folder in template_folders:

Expand All @@ -236,7 +236,7 @@ def execute_backup(self, **options):
template_folder = os.path.join(template_files_folders,
os.path.basename(os.path.normpath(template_files_folder)))
if not os.path.exists(template_folder):
os.makedirs(template_folder)
os.makedirs(template_folder, exist_ok=True)

copy_tree(template_files_folder, template_folder,
ignore=utils.ignore_time(config.gs_data_dt_filter[0], config.gs_data_dt_filter[1]))
Expand All @@ -246,7 +246,7 @@ def execute_backup(self, **options):
locale_folders = settings.LOCALE_PATHS
locale_files_folders = os.path.join(target_folder, utils.LOCALE_PATHS)
if not os.path.exists(locale_files_folders):
os.makedirs(locale_files_folders)
os.makedirs(locale_files_folders, exist_ok=True)

for locale_files_folder in locale_folders:

Expand All @@ -261,7 +261,7 @@ def execute_backup(self, **options):
locale_folder = os.path.join(locale_files_folders,
os.path.basename(os.path.normpath(locale_files_folder)))
if not os.path.exists(locale_folder):
os.makedirs(locale_folder)
os.makedirs(locale_folder, exist_ok=True)

copy_tree(locale_files_folder, locale_folder,
ignore=utils.ignore_time(config.gs_data_dt_filter[0], config.gs_data_dt_filter[1]))
Expand Down Expand Up @@ -400,7 +400,7 @@ def dump_geoserver_raster_data(self, config, settings, target_folder):
if os.path.exists(gs_data_root):
gs_data_folder = os.path.join(target_folder, 'gs_data_dir', 'geonode')
if not os.path.exists(gs_data_folder):
os.makedirs(gs_data_folder)
os.makedirs(gs_data_folder, exist_ok=True)
copy_tree(gs_data_root, gs_data_folder,
ignore=utils.ignore_time(config.gs_data_dt_filter[0], config.gs_data_dt_filter[1]))
logger.info(f"Dumped GeoServer Uploaded Data from '{gs_data_root}'.")
Expand All @@ -415,7 +415,7 @@ def dump_geoserver_raster_data(self, config, settings, target_folder):
if os.path.exists(gs_data_root):
gs_data_folder = os.path.join(target_folder, 'gs_data_dir', 'data', 'geonode')
if not os.path.exists(gs_data_folder):
os.makedirs(gs_data_folder)
os.makedirs(gs_data_folder, exist_ok=True)

copy_tree(gs_data_root, gs_data_folder,
ignore=utils.ignore_time(config.gs_data_dt_filter[0], config.gs_data_dt_filter[1]))
Expand All @@ -436,7 +436,7 @@ def dump_geoserver_vector_data(self, config, settings, target_folder):

gs_data_folder = os.path.join(target_folder, 'gs_data_dir', 'geonode')
if not os.path.exists(gs_data_folder):
os.makedirs(gs_data_folder)
os.makedirs(gs_data_folder, exist_ok=True)

utils.dump_db(config, ogc_db_name, ogc_db_user, ogc_db_port,
ogc_db_host, ogc_db_passwd, gs_data_folder)
Expand All @@ -455,7 +455,7 @@ def copy_external_resource(abspath):
external_dir = os.path.dirname(external_path)

if not os.path.isdir(external_dir):
os.makedirs(external_dir)
os.makedirs(external_dir, exist_ok=True)

try:
if not os.path.isdir(external_path) and os.path.exists(external_path):
Expand Down
18 changes: 9 additions & 9 deletions geonode/br/management/commands/restore.py
Original file line number Diff line number Diff line change
Expand Up @@ -242,7 +242,7 @@ def execute_restore(self, **options):

restore_folder = os.path.join(temp_dir_path, f'tmp{str(uuid.uuid4())[:4]}')
try:
os.makedirs(restore_folder)
os.makedirs(restore_folder, exist_ok=True)
except Exception as e:
raise e
try:
Expand Down Expand Up @@ -382,7 +382,7 @@ def execute_restore(self, **options):
shutil.rmtree(media_root, ignore_errors=True)

if not os.path.exists(media_root):
os.makedirs(media_root)
os.makedirs(media_root, exist_ok=True)

copy_tree(media_folder, media_root)
chmod_tree(media_root)
Expand All @@ -393,7 +393,7 @@ def execute_restore(self, **options):
shutil.rmtree(static_root, ignore_errors=True)

if not os.path.exists(static_root):
os.makedirs(static_root)
os.makedirs(static_root, exist_ok=True)

copy_tree(static_folder, static_root)
chmod_tree(static_root)
Expand All @@ -416,7 +416,7 @@ def execute_restore(self, **options):
shutil.rmtree(static_files_folder, ignore_errors=True)

if not os.path.exists(static_files_folder):
os.makedirs(static_files_folder)
os.makedirs(static_files_folder, exist_ok=True)

copy_tree(os.path.join(static_files_folders,
os.path.basename(os.path.normpath(static_files_folder))),
Expand All @@ -441,7 +441,7 @@ def execute_restore(self, **options):
shutil.rmtree(template_files_folder, ignore_errors=True)

if not os.path.exists(template_files_folder):
os.makedirs(template_files_folder)
os.makedirs(template_files_folder, exist_ok=True)

copy_tree(os.path.join(template_files_folders,
os.path.basename(os.path.normpath(template_files_folder))),
Expand All @@ -466,7 +466,7 @@ def execute_restore(self, **options):
shutil.rmtree(locale_files_folder, ignore_errors=True)

if not os.path.exists(locale_files_folder):
os.makedirs(locale_files_folder)
os.makedirs(locale_files_folder, exist_ok=True)

copy_tree(os.path.join(locale_files_folders,
os.path.basename(os.path.normpath(locale_files_folder))),
Expand Down Expand Up @@ -743,7 +743,7 @@ def prepare_geoserver_gwc_config(self, config, settings):
except Exception:
pass
if not os.path.exists(gwc_layers_root):
os.makedirs(gwc_layers_root)
os.makedirs(gwc_layers_root, exist_ok=True)

def restore_geoserver_raster_data(self, config, settings, target_folder):
if (config.gs_data_dir):
Expand All @@ -756,7 +756,7 @@ def restore_geoserver_raster_data(self, config, settings, target_folder):
gs_data_root = os.path.join(settings.PROJECT_ROOT, '..', gs_data_root)

if not os.path.exists(gs_data_root):
os.makedirs(gs_data_root)
os.makedirs(gs_data_root, exist_ok=True)

copy_tree(gs_data_folder, gs_data_root)
print(f"GeoServer Uploaded Raster Data Restored to '{gs_data_root}'.")
Expand All @@ -771,7 +771,7 @@ def restore_geoserver_raster_data(self, config, settings, target_folder):
gs_data_root = os.path.join(settings.PROJECT_ROOT, '..', gs_data_root)

if not os.path.exists(gs_data_root):
os.makedirs(gs_data_root)
os.makedirs(gs_data_root, exist_ok=True)

copy_tree(gs_data_folder, gs_data_root)
print(f"GeoServer Uploaded Data Restored to '{gs_data_root}'.")
Expand Down
4 changes: 2 additions & 2 deletions geonode/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -275,7 +275,7 @@ def all(self):

def mkdtemp(dir=settings.MEDIA_ROOT):
if not os.path.exists(dir):
os.makedirs(dir)
os.makedirs(dir, exist_ok=True)
tempdir = None
while not tempdir:
try:
Expand Down Expand Up @@ -1693,7 +1693,7 @@ def copy_tree(src, dst, symlinks=False, ignore=None):
def extract_archive(zip_file, dst):
target_folder = os.path.join(dst, os.path.splitext(os.path.basename(zip_file))[0])
if not os.path.exists(target_folder):
os.makedirs(target_folder)
os.makedirs(target_folder, exist_ok=True)

with ZipFile(zip_file, "r", allowZip64=True) as z:
z.extractall(target_folder)
Expand Down
4 changes: 2 additions & 2 deletions pavement.py
Original file line number Diff line number Diff line change
Expand Up @@ -1140,7 +1140,7 @@ def waitfor(url, timeout=300):

def _copytree(src, dst, symlinks=False, ignore=None):
if not os.path.exists(dst):
os.makedirs(dst)
os.makedirs(dst, exist_ok=True)
for item in os.listdir(src):
s = os.path.join(src, item)
d = os.path.join(dst, item)
Expand All @@ -1159,7 +1159,7 @@ def justcopy(origin, target):
_copytree(origin, target)
elif os.path.isfile(origin):
if not os.path.exists(target):
os.makedirs(target)
os.makedirs(target, exist_ok=True)
shutil.copy(origin, target)


Expand Down

0 comments on commit 63d03ce

Please sign in to comment.