mirror of
https://github.com/clinton-hall/nzbToMedia.git
synced 2025-07-06 13:11:11 -07:00
80 lines
2.3 KiB
Python
80 lines
2.3 KiB
Python
|
|
from functools import partial
|
|
import os
|
|
import re
|
|
import stat
|
|
|
|
from six import text_type
|
|
|
|
import core
|
|
from core import logger
|
|
|
|
|
|
def make_dir(path):
|
|
if not os.path.isdir(path):
|
|
try:
|
|
os.makedirs(path)
|
|
except Exception:
|
|
return False
|
|
return True
|
|
|
|
|
|
def remote_dir(path):
|
|
if not core.REMOTEPATHS:
|
|
return path
|
|
for local, remote in core.REMOTEPATHS:
|
|
if local in path:
|
|
base_dirs = path.replace(local, '').split(os.sep)
|
|
if '/' in remote:
|
|
remote_sep = '/'
|
|
else:
|
|
remote_sep = '\\'
|
|
new_path = remote_sep.join([remote] + base_dirs)
|
|
new_path = re.sub(r'(\S)(\\+)', r'\1\\', new_path)
|
|
new_path = re.sub(r'(/+)', r'/', new_path)
|
|
new_path = re.sub(r'([/\\])$', r'', new_path)
|
|
return new_path
|
|
return path
|
|
|
|
|
|
def get_dir_size(input_path):
|
|
prepend = partial(os.path.join, input_path)
|
|
return sum([
|
|
(os.path.getsize(f) if os.path.isfile(f) else get_dir_size(f))
|
|
for f in map(prepend, os.listdir(text_type(input_path)))
|
|
])
|
|
|
|
|
|
def remove_empty_folders(path, remove_root=True):
|
|
"""Function to remove empty folders"""
|
|
if not os.path.isdir(path):
|
|
return
|
|
|
|
# remove empty subfolders
|
|
logger.debug('Checking for empty folders in:{0}'.format(path))
|
|
files = os.listdir(text_type(path))
|
|
if len(files):
|
|
for f in files:
|
|
fullpath = os.path.join(path, f)
|
|
if os.path.isdir(fullpath):
|
|
remove_empty_folders(fullpath)
|
|
|
|
# if folder empty, delete it
|
|
files = os.listdir(text_type(path))
|
|
if len(files) == 0 and remove_root:
|
|
logger.debug('Removing empty folder:{}'.format(path))
|
|
os.rmdir(path)
|
|
|
|
|
|
def remove_read_only(filename):
|
|
if os.path.isfile(filename):
|
|
# check first the read-only attribute
|
|
file_attribute = os.stat(filename)[0]
|
|
if not file_attribute & stat.S_IWRITE:
|
|
# File is read-only, so make it writeable
|
|
logger.debug('Read only mode on file {name}. Attempting to make it writeable'.format
|
|
(name=filename))
|
|
try:
|
|
os.chmod(filename, stat.S_IWRITE)
|
|
except Exception:
|
|
logger.warning('Cannot change permissions of {file}'.format(file=filename), logger.WARNING)
|