168 lines
5.2 KiB
Python
168 lines
5.2 KiB
Python
from __future__ import print_function
|
|
import os, zipfile, io, platform
|
|
import sys, tempfile
|
|
import subprocess
|
|
from appdirs import AppDirs
|
|
import shutil
|
|
|
|
#try:
|
|
# import zlib
|
|
# ZIP_MODE = zipfile.ZIP_DEFLATED
|
|
#except:
|
|
ZIP_MODE = zipfile.ZIP_STORED
|
|
|
|
DEBUG = False
|
|
|
|
def is_windows():
|
|
return platform.system() == 'Windows'
|
|
|
|
def get_temp_dir():
|
|
return tempfile.gettempdir()
|
|
|
|
def to_camel_case(underscore):
|
|
res = ''.join(x.capitalize() or '_' for x in underscore.split('_'))
|
|
return res[:1].lower() + res[1:]
|
|
|
|
def path_join(base, *rest):
|
|
new_rest = []
|
|
for i in range(len(rest)):
|
|
new_rest.append(str(rest[i]))
|
|
|
|
rpath = u'/'.join(new_rest)
|
|
|
|
if not os.path.isabs(rpath):
|
|
rpath = base + u'/' + rpath
|
|
|
|
if is_windows():
|
|
rpath = rpath.replace('/', '\\')
|
|
return rpath
|
|
|
|
def get_data_path(dir_path):
|
|
parts = dir_path.split('/')
|
|
dirs = AppDirs('Electrify', 'Electrify')
|
|
data_path = path_join(dirs.user_data_dir, *parts)
|
|
|
|
if is_windows():
|
|
data_path = data_path.replace(u'\\', u'/')
|
|
|
|
if not os.path.exists(data_path):
|
|
os.makedirs(data_path)
|
|
|
|
return data_path
|
|
|
|
def get_data_file_path(file_path):
|
|
parts = file_path.split('/')
|
|
data_path = get_data_path('/'.join(parts[:-1]))
|
|
return path_join(data_path, parts[-1])
|
|
|
|
def rmtree(path, **kwargs):
|
|
if is_windows():
|
|
if os.path.isabs(path):
|
|
path = '\\\\?\\'+path.replace('/', '\\')
|
|
shutil.rmtree(path, **kwargs)
|
|
|
|
def copy(src, dest, **kwargs):
|
|
if is_windows():
|
|
if os.path.isabs(src):
|
|
src = '\\\\?\\'+src.replace('/', '\\')
|
|
if os.path.isabs(dest):
|
|
dest = '\\\\?\\'+dest.replace('/', '\\')
|
|
shutil.copy(src, dest, **kwargs)
|
|
|
|
def move(src, dest, **kwargs):
|
|
if is_windows():
|
|
if os.path.isabs(src):
|
|
src = '\\\\?\\'+src.replace('/', '\\')
|
|
if os.path.isabs(dest):
|
|
dest = '\\\\?\\'+dest.replace('/', '\\')
|
|
shutil.move(src, dest, **kwargs)
|
|
|
|
def copytree(src, dest, **kwargs):
|
|
if is_windows():
|
|
if os.path.isabs(src):
|
|
src = '\\\\?\\'+src.replace('/', '\\')
|
|
if os.path.isabs(dest):
|
|
dest = '\\\\?\\'+dest.replace('/', '\\')
|
|
shutil.copytree(src, dest, **kwargs)
|
|
|
|
def log(*args):
|
|
if DEBUG:
|
|
print(*args)
|
|
with open(get_data_file_path('files/error.log'), 'a+') as f:
|
|
f.write(', '.join(args))
|
|
f.write('\n')
|
|
|
|
def open_folder_in_explorer(path):
|
|
if platform.system() == "Windows":
|
|
os.startfile(path)
|
|
elif platform.system() == "Darwin":
|
|
subprocess.Popen(["open", path])
|
|
else:
|
|
subprocess.Popen(["xdg-open", path])
|
|
|
|
def zip_files(zip_file_name, *args, **kwargs):
|
|
zip_file = zipfile.ZipFile(zip_file_name, 'w', ZIP_MODE)
|
|
verbose = kwargs.pop('verbose', False)
|
|
exclude_paths = kwargs.pop('exclude_paths', [])
|
|
old_path = os.getcwd()
|
|
|
|
for arg in args:
|
|
if is_windows():
|
|
arg = '\\\\?\\'+os.path.abspath(arg).replace('/', '\\')
|
|
if os.path.exists(arg):
|
|
if os.path.isdir(arg):
|
|
directory = os.path.abspath(arg)
|
|
os.chdir(directory)
|
|
|
|
for root, dirs, files in os.walk(directory):
|
|
excluded = False
|
|
for exclude_path in exclude_paths:
|
|
if exclude_path in path_join(directory,root):
|
|
excluded = True
|
|
if not excluded:
|
|
for file in files:
|
|
file_loc = os.path.relpath(path_join(root, file), directory)
|
|
if verbose:
|
|
log(file_loc)
|
|
try:
|
|
zip_file.write(file_loc)
|
|
except ValueError:
|
|
os.utime(file_loc, None)
|
|
zip_file.write(file_loc)
|
|
for direc in dirs:
|
|
dir_loc = os.path.relpath(path_join(root, direc), directory)
|
|
if verbose:
|
|
log(dir_loc)
|
|
try:
|
|
zip_file.write(dir_loc)
|
|
except ValueError:
|
|
os.utime(file_loc, None)
|
|
zip_file.write(file_loc)
|
|
|
|
else:
|
|
file = os.path.abspath(arg)
|
|
directory = os.path.abspath(path_join(file, '..'))
|
|
os.chdir(directory)
|
|
file_loc = os.path.relpath(arg, directory)
|
|
if verbose:
|
|
log(file_loc)
|
|
try:
|
|
zip_file.write(file_loc)
|
|
except ValueError:
|
|
os.utime(file_loc, None)
|
|
zip_file.write(file_loc)
|
|
|
|
os.chdir(old_path)
|
|
|
|
zip_file.close()
|
|
|
|
def join_files(destination, *args, **kwargs):
|
|
with io.open(destination, 'wb') as dest_file:
|
|
for arg in args:
|
|
if os.path.exists(arg):
|
|
with io.open(arg, 'rb') as file:
|
|
while True:
|
|
bytes = file.read(4096)
|
|
if len(bytes) == 0:
|
|
break
|
|
dest_file.write(bytes)
|