5 HCE project, Python bindings, Distributed Tasks Manager application. 6 Upgrade-helper content main functional for group operation for upgrade MySQL database 9 @file upgrade-helper.py 10 @author Alexander Vybornyh <alexander.hce.cluster@gmail.com> 11 @link: http://hierarchical-cluster-engine.com/ 12 @copyright: Copyright © 2013-2016 IOIX Ukraine 13 @license: http://hierarchical-cluster-engine.com/license/ 24 from cement.core
import foundation
29 from curses.ascii
import isalpha
34 APP_NAME =
'upgrade-helper' 51 app = foundation.CementApp(APP_NAME)
53 app.add_arg(
'-d',
'--db', action=
'store', metavar=
'use_database_name_for_show_tables', help=
'use database name for getting site_id')
54 app.add_arg(
'-p',
'--ptn', action=
'store', metavar=
'part_table_name', help=
'part of table_name')
55 app.add_arg(
'-t',
'--tdb', action=
'store', metavar=
'use_database_name_for_execution', help=
'use database name for execution')
56 app.add_arg(
'-f',
'--file', action=
'store', metavar=
'input_file_name', help=
'input file name with sql request')
57 app.add_arg(
'-c',
'--config', action=
'store', metavar=
'config_file_name', help=
'config ini-file', required=
True)
61 partTableName = app.pargs.ptn
62 tdbName = app.pargs.tdb
63 fileName = app.pargs.file
64 configName = app.pargs.config
66 return dbName, partTableName, tdbName, fileName, configName
77 config = ConfigParser.ConfigParser()
78 config.optionxform = str
80 readOk = config.read(configName)
82 raise Exception(
"Wrong config file name '" + str(configName) +
"'")
85 except Exception, err:
86 raise Exception(
'Get DBTaskWrapper: ' + str(err))
99 if isinstance(response, tuple):
100 for elem
in response:
102 if elem[0].find(oldTableNamePart) > -1:
103 name = copy.deepcopy(elem[0])
104 name = name.replace(oldTableNamePart, newTableNamePart)
118 f = open(fileName,
'r') 119 rawRequest = f.read() 122 words = rawRequest.split() 124 if word.count(
'%') > 1:
125 tableNamePart = word[:word.find(
'%')]
128 for elem
in tableNamePart:
130 tableNamePart = tableNamePart[tableNamePart.find(elem):]
133 return rawRequest, tableNamePart
142 def makeSql(rawRequest, tableName, tableNamePart):
145 for word
in rawRequest.split():
146 if word.find(tableNamePart) > -1:
147 words.append(tableName)
151 sql =
' '.
join(words)
156 if __name__ ==
'__main__':
157 exit_code = APP_CONSTS.EXIT_SUCCESS
162 if wrapper
is not None:
164 response = wrapper.customRequest(sql, dbName)
168 dc_crawler.DBTasksWrapper.logger.addHandler(logging.NullHandler())
169 for tableName
in tableNames:
171 sql =
makeSql(rawRequest, tableName, tableNamePart)
172 wrapper.customRequest(sql, tdbName)
174 print(
'Affected success ' + str(len(tableNames)) +
' rows')
176 except Exception
as err:
177 sys.stderr.write(str(err) +
'\n')
178 exit_code = APP_CONSTS.EXIT_FAILURE
180 exit_code = EXIT_FAILURE
def getCmdParams()
# Sample of execution:.
def getDBTasksWrapper(configName)
def getTableNamesList(response, oldTableNamePart, newTableNamePart)
def extractRequest(fileName)
def makeSql(rawRequest, tableName, tableNamePart)