# -*- coding: utf-8 -*-# vim: tabstop=4 shiftwidth=4 softtabstop=4## Copyright (C) 2016-2023 GEM Foundation## OpenQuake is free software: you can redistribute it and/or modify it# under the terms of the GNU Affero General Public License as published# by the Free Software Foundation, either version 3 of the License, or# (at your option) any later version.## OpenQuake is distributed in the hope that it will be useful,# but WITHOUT ANY WARRANTY; without even the implied warranty of# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the# GNU Affero General Public License for more details.## You should have received a copy of the GNU Affero General Public License# along with OpenQuake. If not, see <http://www.gnu.org/licenses/>.importastimportsysimportinspectimportgetpassfromdecoratorimportgetfullargspecfromopenquake.baselibimportconfigfromopenquake.calculators.viewsimporttext_tablefromopenquake.commonlibimportlogsfromopenquake.server.dbimportactionscommands={}forfuncinvars(actions).values():ifinspect.isfunction(func):# is really a functionargspec=getfullargspec(func)ifargspec.args[0]=='db':# is a db actioncommands[func.__name__]=argspec.args[1:]
[docs]defconvert(strings):""" Convert strings into literal Python objects """forsinstrings:try:yieldast.literal_eval(s)exceptException:yields
[docs]defmain(cmd,args=()):""" Run a database command """ifcmdincommandsandlen(args)!=len(commands[cmd]):sys.exit('Wrong number of arguments, expected %s, got %s'%(commands[cmd],args))elif(cmdnotincommandsandnotcmd.upper().startswith('SELECT')andconfig.multi_userandgetpass.getuser()!='openquake'):sys.exit('You have no permission to run %s'%cmd)res=logs.dbcmd(cmd,*convert(args))ifhasattr(res,'_fields')andres.__class__.__name__!='Row':print(text_table(res))else:print(res)