| 0 | 1 # To change this template, choose Tools | Templates | 
|  | 2 # and open the template in the editor. | 
|  | 3 | 
|  | 4 __author__ = "Chaitanya Guttula" | 
|  | 5 | 
|  | 6 | 
|  | 7 import os | 
|  | 8 import sys | 
|  | 9 from shutil import copytree, ignore_patterns | 
|  | 10 | 
|  | 11 galaxyhome=os.environ.get('GALAXY_HOME') | 
|  | 12 #print galaxyhome | 
|  | 13 | 
|  | 14 #os.mkdir(galaxyhome+'/GAL') | 
|  | 15 dirfilelist=os.listdir(galaxyhome+'/tools') | 
|  | 16 exist = False | 
|  | 17 for dirfile in dirfilelist: | 
|  | 18     if dirfile == 'WebServiceToolWorkflow_REST_SOAP': | 
|  | 19         exist = True | 
|  | 20         break | 
|  | 21 | 
|  | 22 if exist: | 
|  | 23     print 'WebServiceToolWorkflow_REST_SOAP is already present in '+galaxyhome+'/tools/WebServiceToolWorkflow_REST_SOAP' | 
|  | 24 else: | 
|  | 25     copytree('WebServiceToolWorkflow_REST_SOAP',galaxyhome+'/tools/WebServiceToolWorkflow_REST_SOAP', ignore=ignore_patterns('*.pyc', 'tmp*')) | 
|  | 26     print 'Copied the folder \'WebServiceToolWorkflow_REST_SOAP\' to '+galaxyhome+'/tools' | 
|  | 27 | 
|  | 28 f1=open(galaxyhome+'/tool_conf.xml','r') | 
|  | 29 f1.seek(0,0) | 
|  | 30 f2=open(galaxyhome+'/tool_conf_backup.xml','w') | 
|  | 31 f2.seek(0,0) | 
|  | 32 | 
|  | 33 #copy the first line <toolbox> into another file f2 | 
|  | 34 line = f1.readline() | 
|  | 35 #f2.write(line) | 
|  | 36 | 
|  | 37 lineStripped=line.lstrip() | 
|  | 38 lineStripped=lineStripped.rstrip() | 
|  | 39 | 
|  | 40 #Flags for verifying that the tool is not already installed | 
|  | 41 tool_present = False | 
|  | 42 webservice_present = False | 
|  | 43 workflow_present = False | 
|  | 44 | 
|  | 45 # Check of the tools are already installed or not | 
|  | 46 # and sets the flags to true if they are already installed | 
|  | 47 while not lineStripped == '</toolbox>': | 
|  | 48     line = f1.readline() | 
|  | 49     lineStripped = line.lstrip() | 
|  | 50     lineStripped=lineStripped.rstrip() | 
|  | 51     if(lineStripped.find('<!--')>-1): | 
|  | 52         line = f1.readline() | 
|  | 53         while(not line.find('-->')>-1): | 
|  | 54             line = f1.readline() | 
|  | 55 | 
|  | 56     if lineStripped == '<section name="Add Web service tool" id="RegisterWebService">': | 
|  | 57         tool_present = True | 
|  | 58     elif lineStripped == '<section name="Web Service Tools" id="WebServices">': | 
|  | 59         webservice_present = True | 
|  | 60     elif lineStripped == '<section name="Web Service Workflow Tools" id="WebServiceWorkflow">': | 
|  | 61         workflow_present = True | 
|  | 62 | 
|  | 63 | 
|  | 64 f1.seek(0,0) | 
|  | 65 line = f1.readline() | 
|  | 66 f2.write(line) | 
|  | 67 | 
|  | 68 lineStripped=line.lstrip() | 
|  | 69 lineStripped=lineStripped.rstrip() | 
|  | 70 | 
|  | 71 # copy to the file f2 till <toolbox> | 
|  | 72 while not lineStripped == '<toolbox>': | 
|  | 73     line = f1.readline() | 
|  | 74     f2.write(line) | 
|  | 75     lineStripped = line.lstrip() | 
|  | 76     lineStripped = lineStripped.rstrip() | 
|  | 77 | 
|  | 78 # Check if the tool is not installed and then add it to the file f2 | 
|  | 79 if not tool_present: | 
|  | 80     f2.write('  <section name="Add Web service tool" id="RegisterWebService">\n') | 
|  | 81     f2.write('    <tool file="WebServiceToolWorkflow_REST_SOAP/WebServiceTool_input_url_REST_SOAP.xml"/>\n') | 
|  | 82     f2.write('    <tool file="WebServiceToolWorkflow_REST_SOAP/WebServiceTool_input_method_REST_SOAP.xml"/>\n') | 
|  | 83     f2.write('    <tool file="WebServiceToolWorkflow_REST_SOAP/refreshTool.xml"/>\n') | 
|  | 84     f2.write('  </section>\n') | 
|  | 85     print 'The "Add Web Service Tool" added successfully' | 
|  | 86 else: | 
|  | 87     print 'The "Add Web service tool" tool is already present' | 
|  | 88 | 
|  | 89 | 
|  | 90 # Check if the section "Web Service Tools" is not installed and then add it to the file f2 | 
|  | 91 if not webservice_present: | 
|  | 92     f2.write('  <section name="Web Service Tools" id="WebServices">\n') | 
|  | 93     f2.write('\n') | 
|  | 94     f2.write('  </section>\n') | 
|  | 95     print 'The "Web Service Tools" added successfully' | 
|  | 96 else: | 
|  | 97     print 'The section "Web Service Tools" is already present' | 
|  | 98 | 
|  | 99 | 
|  | 100 # Check if the Section "Web Service Workflow Tools" is not installed and then add it to the file f2 | 
|  | 101 if not workflow_present: | 
|  | 102     f2.write('  <section name="Web Service Workflow Tools" id="WebServiceWorkflow">\n') | 
|  | 103     f2.write('\n') | 
|  | 104     f2.write('  </section>\n') | 
|  | 105     print 'The section "Web Service Workflow Tools" is added successfully' | 
|  | 106 else: | 
|  | 107     print 'The section "Web Service Workflow Tools" is already present' | 
|  | 108 | 
|  | 109 | 
|  | 110 #copy rest of tool_conf.xml file to f2 | 
|  | 111 while not lineStripped == '</toolbox>': | 
|  | 112     line = f1.readline() | 
|  | 113     f2.write(line) | 
|  | 114     lineStripped = line.lstrip() | 
|  | 115     lineStripped=lineStripped.rstrip() | 
|  | 116 #else: | 
|  | 117 #    print line | 
|  | 118 | 
|  | 119 ##close f1 and f2 | 
|  | 120 f1.close() | 
|  | 121 f2.close() | 
|  | 122 | 
|  | 123 ##interchange modes of f1 and f2 | 
|  | 124 f1=open(galaxyhome+'/tool_conf.xml','w') | 
|  | 125 f1.seek(0,0) | 
|  | 126 f2=open(galaxyhome+'/tool_conf_backup.xml','r') | 
|  | 127 f2.seek(0,0) | 
|  | 128 | 
|  | 129 line = f2.readline() | 
|  | 130 f1.write(line) | 
|  | 131 | 
|  | 132 lineStripped=line.lstrip() | 
|  | 133 lineStripped = lineStripped.rstrip() | 
|  | 134 | 
|  | 135 ##write entire f2 into f1 (reverse roles) | 
|  | 136 while not lineStripped == '</toolbox>': | 
|  | 137     line = f2.readline() | 
|  | 138     f1.write(line) | 
|  | 139     lineStripped = line.lstrip() | 
|  | 140     lineStripped = lineStripped.rstrip() | 
|  | 141 #else: | 
|  | 142 #    print line | 
|  | 143 | 
|  | 144 f1.close() | 
|  | 145 f2.close() | 
|  | 146 | 
|  | 147 | 
|  | 148 # Adding Code to __init__.py in lib/galaxy/tools folder in Galaxy for disabling Web service stand alone tools in Workflows | 
|  | 149 f1 = open(galaxyhome+'/lib/galaxy/tools/__init__.py','r') | 
|  | 150 f1.seek(0,0) | 
|  | 151 | 
|  | 152 exist = False | 
|  | 153 line = f1.readline() | 
|  | 154 linestripped = line.lstrip() | 
|  | 155 linestripped = linestripped.rstrip() | 
|  | 156 while line != '': | 
|  | 157 #    if(linsetripped.find('\'\'\'')>-1): | 
|  | 158 #        line = f1.readline() | 
|  | 159 #        while(not line.find('\'\'\'')>-1): | 
|  | 160 #            line = f1.readline() | 
|  | 161     if(linestripped == 'if self.id.find("WebService")>-1:'): | 
|  | 162         exist = True | 
|  | 163         break | 
|  | 164     line = f1.readline() | 
|  | 165     linestripped = line.lstrip() | 
|  | 166     linestripped = linestripped.rstrip() | 
|  | 167 | 
|  | 168 if exist : | 
|  | 169     print 'Workflow code is already present in __init__.py' | 
|  | 170 else: | 
|  | 171     f2 = open(galaxyhome+'/lib/galaxy/tools/__init__backup.py','w') | 
|  | 172     f2.seek(0,0) | 
|  | 173     f1.seek(0,0) | 
|  | 174     line = f1.readline() | 
|  | 175     f2.write(line) | 
|  | 176     linestripped = line.lstrip() | 
|  | 177     linestripped = linestripped.rstrip() | 
|  | 178     while not (linestripped.find('def check_workflow_compatible(')>-1): | 
|  | 179         line = f1.readline() | 
|  | 180         linestripped = line.lstrip() | 
|  | 181         linestripped = linestripped.rstrip() | 
|  | 182         f2.write(line) | 
|  | 183     if line.find('(')>-1: | 
|  | 184         while not line.find(')')>-1: | 
|  | 185             line = f1.readline() | 
|  | 186             f2.write(line) | 
|  | 187 | 
|  | 188     line = f1.readline() | 
|  | 189     while line.find('#')>-1: | 
|  | 190         f2.write(line) | 
|  | 191         line = f1.readline() | 
|  | 192 | 
|  | 193     indent=0 | 
|  | 194     while (line[indent] == ' '): | 
|  | 195         indent = indent+1 | 
|  | 196 | 
|  | 197     space = '' | 
|  | 198     for i in range(0,indent): | 
|  | 199         space +=' ' | 
|  | 200 | 
|  | 201     f2.write(space+'#############\n') | 
|  | 202     f2.write(space+'#added by Chaitany Guttula, chaitu86@uga.edu - to disable webservice standalone tools in Workflows\n') | 
|  | 203     f2.write(space+'if self.id.find("WebService")>-1:\n') | 
|  | 204     f2.write(space+'    return False\n') | 
|  | 205     f2.write(space+'#############\n') | 
|  | 206 | 
|  | 207     f2.write(line) | 
|  | 208     line = f1.readline() | 
|  | 209     f2.write(line) | 
|  | 210 | 
|  | 211     while line != '': | 
|  | 212         line = f1.readline() | 
|  | 213         f2.write(line) | 
|  | 214 | 
|  | 215     f1.close() | 
|  | 216     f2.close() | 
|  | 217 | 
|  | 218     f1 = open(galaxyhome+'/lib/galaxy/tools/__init__backup.py','r') | 
|  | 219     f2 = open(galaxyhome+'/lib/galaxy/tools/__init__.py','w') | 
|  | 220 | 
|  | 221     line = f1.readline() | 
|  | 222     f2.write(line) | 
|  | 223 | 
|  | 224     while line != '': | 
|  | 225         line = f1.readline() | 
|  | 226         f2.write(line) | 
|  | 227 | 
|  | 228     f1.close() | 
|  | 229     f2.close() | 
|  | 230     print 'Workflow disabling Code added to __init__.py' | 
|  | 231 | 
|  | 232 | 
|  | 233 | 
|  | 234 # Adding Code to __init__.py in lib/galaxy/tools folder in Galaxy for invoking the refresh functionality | 
|  | 235 f1 = open(galaxyhome+'/lib/galaxy/tools/__init__.py','r') | 
|  | 236 f1.seek(0,0) | 
|  | 237 | 
|  | 238 exist = False | 
|  | 239 line = f1.readline() | 
|  | 240 linestripped = line.lstrip() | 
|  | 241 linestripped = linestripped.rstrip() | 
|  | 242 while line != '': | 
|  | 243 #    if(linsetripped.find('\'\'\'')>-1): | 
|  | 244 #        line = f1.readline() | 
|  | 245 #        while(not line.find('\'\'\'')>-1): | 
|  | 246 #            line = f1.readline() | 
|  | 247     if(linestripped == 'if self.id == \'WebService_REFRESH_ID\':'): | 
|  | 248         exist = True | 
|  | 249         break | 
|  | 250     line = f1.readline() | 
|  | 251     linestripped = line.lstrip() | 
|  | 252     linestripped = linestripped.rstrip() | 
|  | 253 | 
|  | 254 if exist : | 
|  | 255     print 'Refresh code is already present in __init__.py' | 
|  | 256 else: | 
|  | 257     f2 = open(galaxyhome+'/lib/galaxy/tools/__init__backup.py','w') | 
|  | 258     f2.seek(0,0) | 
|  | 259     f1.seek(0,0) | 
|  | 260     line = f1.readline() | 
|  | 261     f2.write(line) | 
|  | 262     linestripped = line.lstrip() | 
|  | 263     linestripped = linestripped.rstrip() | 
|  | 264     while not (linestripped.find('def execute(')>-1): | 
|  | 265         line = f1.readline() | 
|  | 266         linestripped = line.lstrip() | 
|  | 267         linestripped = linestripped.rstrip() | 
|  | 268         f2.write(line) | 
|  | 269     if line.find('(')>-1: | 
|  | 270         while not line.find(')')>-1: | 
|  | 271             line = f1.readline() | 
|  | 272             f2.write(line) | 
|  | 273 | 
|  | 274     line = f1.readline() | 
|  | 275     while line.find('#')>-1: | 
|  | 276         f2.write(line) | 
|  | 277         line = f1.readline() | 
|  | 278 | 
|  | 279     indent=0 | 
|  | 280     while (line[indent] == ' '): | 
|  | 281         indent = indent+1 | 
|  | 282 | 
|  | 283     space = '' | 
|  | 284     for i in range(0,indent): | 
|  | 285         space +=' ' | 
|  | 286 | 
|  | 287     f2.write(space+'#############\n') | 
|  | 288     f2.write(space+'#add code to verify if user has administrative privileges\n') | 
|  | 289     f2.write(space+'#added by sumedha ganjoo, sganjoo@uga.edu - to refresh toolbox\n') | 
|  | 290     f2.write(space+'if self.id == \'WebService_REFRESH_ID\':\n') | 
|  | 291     f2.write(space+'    self.app.refreshToolBox()\n') | 
|  | 292     f2.write(space+'#############\n') | 
|  | 293 | 
|  | 294     f2.write(line) | 
|  | 295     line = f1.readline() | 
|  | 296     f2.write(line) | 
|  | 297 | 
|  | 298     while line != '': | 
|  | 299         line = f1.readline() | 
|  | 300         f2.write(line) | 
|  | 301 | 
|  | 302     f1.close() | 
|  | 303     f2.close() | 
|  | 304 | 
|  | 305     f1 = open(galaxyhome+'/lib/galaxy/tools/__init__backup.py','r') | 
|  | 306     f2 = open(galaxyhome+'/lib/galaxy/tools/__init__.py','w') | 
|  | 307 | 
|  | 308     line = f1.readline() | 
|  | 309     f2.write(line) | 
|  | 310 | 
|  | 311     while line != '': | 
|  | 312         line = f1.readline() | 
|  | 313         f2.write(line) | 
|  | 314 | 
|  | 315     f1.close() | 
|  | 316     f2.close() | 
|  | 317     print 'Refresh Code added to __init__.py' | 
|  | 318 | 
|  | 319 | 
|  | 320 # Adding Code to app.py in lib/galaxy folder in Galaxy for invoking the refresh functionality | 
|  | 321 f1 = open(galaxyhome+'/lib/galaxy/app.py','r') | 
|  | 322 | 
|  | 323 f1.seek(0,0) | 
|  | 324 | 
|  | 325 exist = False | 
|  | 326 line = f1.readline() | 
|  | 327 linestripped = line.lstrip() | 
|  | 328 linestripped = linestripped.rstrip() | 
|  | 329 while line != '': | 
|  | 330     if(linestripped == 'def refreshToolBox( self ):'): | 
|  | 331         exist = True | 
|  | 332         break | 
|  | 333     line = f1.readline() | 
|  | 334     linestripped = line.lstrip() | 
|  | 335     linestripped = linestripped.rstrip() | 
|  | 336 | 
|  | 337 if exist: | 
|  | 338     print 'Refresh code is already present in app.py' | 
|  | 339 else: | 
|  | 340     f2 = open(galaxyhome+'/lib/galaxy/app_backup.py','w') | 
|  | 341     f2.seek(0,0) | 
|  | 342     f1.seek(0,0) | 
|  | 343     line = f1.readline() | 
|  | 344     f2.write(line) | 
|  | 345     linestripped = line.lstrip() | 
|  | 346     linestripped = linestripped.rstrip() | 
|  | 347     while not (line.find('class UniverseApplication')>-1): | 
|  | 348         line = f1.readline() | 
|  | 349         linestripped = line.lstrip() | 
|  | 350         linestripped = linestripped.rstrip() | 
|  | 351         f2.write(line) | 
|  | 352     if line.find('(')>-1: | 
|  | 353         while not line.find(')')>-1: | 
|  | 354             line = f1.readline() | 
|  | 355             f2.write(line) | 
|  | 356 | 
|  | 357     line = f1.readline() | 
|  | 358 | 
|  | 359     while line.find('#')>-1: | 
|  | 360         f2.write(line) | 
|  | 361         line = f1.readline() | 
|  | 362 | 
|  | 363 | 
|  | 364     indent=0 | 
|  | 365     while (line[indent] == ' '): | 
|  | 366         indent = indent+1 | 
|  | 367 | 
|  | 368     space = '' | 
|  | 369     for i in range(0,indent): | 
|  | 370         space +=' ' | 
|  | 371 | 
|  | 372     f2.write(space+'#############\n') | 
|  | 373     f2.write(space+'#added by sumedha ganjoo, sganjoo@uga.edu\n') | 
|  | 374     f2.write(space+'def refreshToolBox( self ):\n') | 
|  | 375     f2.write(space+'    self.toolbox = tools.ToolBox( self.config.tool_config, self.config.tool_path, self )\n') | 
|  | 376     f2.write(space+'#############\n\n') | 
|  | 377 | 
|  | 378     f2.write(line) | 
|  | 379     line = f1.readline() | 
|  | 380     f2.write(line) | 
|  | 381 | 
|  | 382     while line != '': | 
|  | 383         line = f1.readline() | 
|  | 384         f2.write(line) | 
|  | 385 | 
|  | 386     f1.close() | 
|  | 387     f2.close() | 
|  | 388 | 
|  | 389     f1 = open(galaxyhome+'/lib/galaxy/app_backup.py','r') | 
|  | 390     f2 = open(galaxyhome+'/lib/galaxy/app.py','w') | 
|  | 391 | 
|  | 392     line = f1.readline() | 
|  | 393     f2.write(line) | 
|  | 394 | 
|  | 395     while line != '': | 
|  | 396         line = f1.readline() | 
|  | 397         f2.write(line) | 
|  | 398 | 
|  | 399     f1.close() | 
|  | 400     f2.close() | 
|  | 401     print 'Refresh code is added to app.py' | 
|  | 402 | 
|  | 403 | 
|  | 404 | 
|  | 405 print '****Installation of tool is complete. Now reload galaxy to use the installed tool****' | 
|  | 406 |