Core Rebase (manca httptools)

This commit is contained in:
Alhaziel
2020-02-05 20:03:46 +01:00
parent 94727450ee
commit 9e1cea2217
9 changed files with 488 additions and 366 deletions

View File

@@ -3,22 +3,26 @@
# Zip Tools
# --------------------------------------------------------------------------------
import io
import os
from builtins import object
import sys
PY3 = False
VFS = True
if sys.version_info[0] >= 3: PY3 = True; unicode = str; unichr = chr; long = int; VFS = False
import zipfile
from platformcode import config, logger
from core import filetools
class ziptools:
class ziptools(object):
def extract(self, file, dir, folder_to_extract="", overwrite_question=False, backup=False):
logger.info("file=%s" % file)
logger.info("dir=%s" % dir)
if not dir.endswith(':') and not os.path.exists(dir):
os.mkdir(dir)
if not dir.endswith(':') and not filetools.exists(dir):
filetools.mkdir(dir)
file = io.FileIO(file)
zf = zipfile.ZipFile(file)
if not folder_to_extract:
self._createstructure(file, dir)
@@ -30,60 +34,66 @@ class ziptools:
if not name.endswith('/'):
logger.info("no es un directorio")
try:
(path, filename) = os.path.split(os.path.join(dir, name))
(path, filename) = filetools.split(filetools.join(dir, name))
logger.info("path=%s" % path)
logger.info("name=%s" % name)
if folder_to_extract:
if path != os.path.join(dir, folder_to_extract):
if path != filetools.join(dir, folder_to_extract):
break
else:
os.makedirs(path)
filetools.mkdir(path)
except:
pass
if folder_to_extract:
outfilename = os.path.join(dir, filename)
outfilename = filetools.join(dir, filename)
else:
outfilename = os.path.join(dir, name)
outfilename = filetools.join(dir, name)
logger.info("outfilename=%s" % outfilename)
try:
if os.path.exists(outfilename) and overwrite_question:
if filetools.exists(outfilename) and overwrite_question:
from platformcode import platformtools
dyesno = platformtools.dialog_yesno("El archivo ya existe",
"El archivo %s a descomprimir ya existe" \
", ¿desea sobrescribirlo?" \
% os.path.basename(outfilename))
% filetools.basename(outfilename))
if not dyesno:
break
if backup:
import time
import shutil
hora_folder = "Copia seguridad [%s]" % time.strftime("%d-%m_%H-%M", time.localtime())
backup = os.path.join(config.get_data_path(), 'backups', hora_folder, folder_to_extract)
if not os.path.exists(backup):
os.makedirs(backup)
shutil.copy2(outfilename, os.path.join(backup, os.path.basename(outfilename)))
backup = filetools.join(config.get_data_path(), 'backups', hora_folder, folder_to_extract)
if not filetools.exists(backup):
filetools.mkdir(backup)
filetools.copy(outfilename, filetools.join(backup, filetools.basename(outfilename)))
outfile = open(outfilename, 'wb')
outfile.write(zf.read(nameo))
if not filetools.write(outfilename, zf.read(nameo), silent=True, vfs=VFS): #TRUNCA en FINAL en Kodi 19 con VFS
logger.error("Error en fichero " + nameo)
except:
import traceback
logger.error(traceback.format_exc())
logger.error("Error en fichero " + nameo)
try:
zf.close()
except:
logger.info("Error cerrando .zip " + file)
def _createstructure(self, file, dir):
self._makedirs(self._listdirs(file), dir)
def create_necessary_paths(filename):
try:
(path, name) = os.path.split(filename)
os.makedirs(path)
(path, name) = filetools.split(filename)
filetools.mkdir(path)
except:
pass
def _makedirs(self, directories, basedir):
for dir in directories:
curdir = os.path.join(basedir, dir)
if not os.path.exists(curdir):
os.mkdir(curdir)
curdir = filetools.join(basedir, dir)
if not filetools.exists(curdir):
filetools.mkdir(curdir)
def _listdirs(self, file):
zf = zipfile.ZipFile(file)