ModelHandle/tools/lib/utils.py
2023-01-14 16:13:29 +01:00

140 lines
4.7 KiB
Python

import os
import re
import codecs
def PrintInfo (message):
print ('INFO: ' + message)
def PrintError (message):
print ('ERROR: ' + message)
def GetFileContent (filePath):
fileObject = codecs.open (filePath, 'r', 'utf-8')
content = fileObject.read ()
fileObject.close ()
return content
def WriteContentToFile (filePath, content):
fileObject = codecs.open (filePath, 'w', 'utf-8')
fileObject.write (content)
fileObject.close ()
def GetEOLCharFromFile (filePath):
content = GetFileContent (filePath)
if content.count ('\r\n') > 0:
return '\r\n'
else:
return '\n'
def RunCommand (executable, arguments):
command = executable + ' "' + '" "'.join (arguments) + '"'
return os.system (command)
class TokenReplacer:
def __init__ (self, filePath, keepToken):
self.fileContent = GetFileContent (filePath)
self.eolChar = self.GetEOLChar ()
self.keepToken = keepToken
def ReplaceTokenContent (self, begToken, endToken, content):
begPosition, linePrefix = self.GetTokenBegPosition (begToken)
endPosition = self.GetTokenEndPosition (endToken)
if begPosition == -1 or endPosition == -1:
return
newContentLines = []
for contentLine in content.splitlines ():
newContentLines.append (linePrefix + contentLine)
newContent = self.eolChar.join (newContentLines)
self.ReplaceContent (begToken, endToken, begPosition, endPosition + len (endToken), linePrefix, newContent)
def ReplaceTokenFileLinks (self, begToken, endToken, fileUrls, version):
begPosition, linePrefix = self.GetTokenBegPosition (begToken)
endPosition = self.GetTokenEndPosition (endToken)
if begPosition == -1 or endPosition == -1:
return
fileLinks = []
for fileUrl in fileUrls:
fileSourceUrl = fileUrl
if version != None:
fileSourceUrl += '?v=' + version
extension = os.path.splitext (fileUrl)[1]
if (extension == '.js'):
fileLinks.append (linePrefix + '<script type="text/javascript" src="' + fileSourceUrl + '"></script>')
elif (extension == '.css'):
fileLinks.append (linePrefix + '<link rel="stylesheet" type="text/css" href="' + fileSourceUrl + '">')
newContent = self.eolChar.join (fileLinks)
self.ReplaceContent (begToken, endToken, begPosition, endPosition + len (endToken), linePrefix, newContent)
def WriteToFile (self, filePath):
WriteContentToFile (filePath, self.fileContent)
def ReplaceContent (self, begToken, endToken, begPosition, endPosition, linePrefix, newContent):
if self.keepToken:
newContent = linePrefix + begToken + self.eolChar + newContent + self.eolChar + linePrefix + endToken
self.ReplaceString (self.fileContent[begPosition : endPosition], newContent)
def ReplaceString (self, oldString, newString):
self.fileContent = self.fileContent.replace (oldString, newString)
def GetTokenBegPosition (self, begToken):
begPosition = self.fileContent.find (begToken)
linePrefix = ''
if begPosition == -1:
return -1, ''
while begPosition > 0:
if self.fileContent[begPosition - 1] == '\n':
break
begPosition -= 1
linePrefix = self.fileContent[begPosition] + linePrefix
return begPosition, linePrefix
def GetTokenEndPosition (self, endToken):
return self.fileContent.find (endToken)
def GetEOLChar (self):
if self.fileContent.count ('\r\n') > 0:
return '\r\n'
else:
return '\n'
def ReplaceInFile (filePath, begToken, endToken, newContent):
content = GetFileContent (filePath)
begPosition = content.find (begToken)
endPosition = content.find (endToken)
if begPosition == -1 or endPosition == -1:
return
content = content.replace (content[begPosition : endPosition + len (endToken)], newContent)
WriteContentToFile (filePath, content)
def ReplaceStringInFile (filePath, oldString, newString):
content = GetFileContent (filePath)
content = content.replace (oldString, newString)
WriteContentToFile (filePath, content)
def ReplaceStringsInFile (filePath, oldNewPairs):
content = GetFileContent (filePath)
for oldNewPair in oldNewPairs:
content = content.replace (oldNewPair[0], oldNewPair[1])
WriteContentToFile (filePath, content)
def ReplaceRegexInFile (filePath, oldRegex, newRegex):
content = GetFileContent (filePath)
content = re.sub (oldRegex, newRegex, content)
WriteContentToFile (filePath, content)
def CreateFileLinks (fileUrls, linePrefix, eolChar):
result = ''
for fileUrl in fileUrls:
extension = os.path.splitext (fileUrl)[1]
if (extension == '.js'):
result += linePrefix + '<script type="text/javascript" src="' + fileUrl + '"></script>' + eolChar
elif (extension == '.css'):
result += linePrefix + '<link rel="stylesheet" type="text/css" href="' + fileUrl + '">' + eolChar
return result
def CreateFileList (fileList, replaceFrom, replaceTo):
result = []
for item in fileList:
result.append (item.replace (replaceFrom, replaceTo))
return result