diff --git a/.gitignore b/.gitignore index 5d9869fb9e9..928136f522c 100644 --- a/.gitignore +++ b/.gitignore @@ -121,7 +121,7 @@ tool-data/shared/jars/ sprite-*.less # JS, Local node_modules, and bower_components directories -static/scripts/bundled +static/scripts/bundled/[0-9]* node_modules bower_components diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index ffc1571fbdd..b30df928d60 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -6,14 +6,23 @@ The following individuals have contributed code to Galaxy: * Istvan Albert * Renato Alves * Guruprasad Ananda +* Evgeny Anatskiy * Florent Angly * Raj Ayyampalayam +* Abdulrahman Azab * Finn Bacall * Dannon Baker +* balto * Christopher Bare +* Bérénice Batut * Marius van den Beek +* Maria Bernard +* Jean-Frédéric Berthelot +* Léo Biscassi * Dan Blanchard +* Clemens Blank * Daniel Blankenberg +* Jorrit Boekel * James Boocock * Carlos Borroto * Daniel Bouchard @@ -26,6 +35,7 @@ The following individuals have contributed code to Galaxy: * Jennifer Cabral * Martin Čech * Ramkrishna Chakrabarty +* Matt Chambers * Brad Chapman * John Chilton * Saket Choudhary @@ -43,13 +53,17 @@ The following individuals have contributed code to Galaxy: * Shane Dowling * John Duddy * Carl Eberhard +* Ignacio Eguinoa * Mark Einon * Kyle Ellrott * Eric Enns * fescudie +* Anne Fouilloux * Dorine Francheteau * Jean-Frédéric (@JeanFred on Github) +* Maximilian Friedersdorff * Jaime Frey +* Ben Fulton * Carrie Ganote * Ryan Golhar * Jeremy Goecks @@ -63,29 +77,41 @@ The following individuals have contributed code to Galaxy: * Saskia Hiltemann * Rob Hooft * Y. Hoogstrate +* Hans-Rudolf Hotz * Jian-Long Huang * Gert Hulselmans +* Manabu Ishii * Jennifer Jackson * Joachim Jacob +* Xiaoqian Jiang * Jim Johnson * Radhesh Kamath +* Iyad Kandalaft * Jan Kanis * David King * Rory Kirchner * Edward Kirton +* Jasper Koehorst +* Anup Kumar * Brad Langhorst +* Delphine Lariviere * Ross Lazarus +* Yvan Le Bras * Gildas Le Corguillé @lecorguille +* Alexander Lenail * Simone Leo * Kanwei Li * Michael Li * Pierre Lindenbaum * Mikael Loaec +* Thoba Lose @thobalose * Philip Mabon * Remi Marenco * Zipho Mashologu * Thomas McGowan * Scott McManus +* Hervé Ménager +* Pablo Moreno * Hunter Moseley * Takao Nakaguchi * Arjun Nath @@ -93,36 +119,48 @@ The following individuals have contributed code to Galaxy: * Eric Paniagua * Richard Park * Lance Parsons +* Balthazar Pavot * Chinmay Rao * Matt Ralston +* ramezrawas * Eric Rasche +* Athos Ribeiro * Andrew Robinson +* Devon Ryan * Michael Sauria * Andrea Sbardellati * Ian Schenck * Nick Semenkovich +* Varun Shankar * Matthew Shirley +* Timur Shtatland * Sourav Singh * Clare Sloggett * Eteri Sokhoyan @Sokhoyan * Nicola Soranzo +* Nick Stoler * Roy Storey * Hanfei Sun * Ilya Sytchev +* Scott Szakonyi * James Taylor * Tomithy Too * David Trudgian * Nitesh Turaga * Clayton Turner * Jesse c j van Dam +* Ashok Varadharajan * Marek Vavruša * Martijn Vermaat * Kelly Vincent +* Jeremy Volkening * Greg Von Kuster * Pavan Videm * Hiral Vora +* Junzhou Wang * Andrew Warren * Trevor Wennblom +* Joachim Wolff * Thomas Wollmann * Jay Young * Yi Zhang diff --git a/lib/galaxy/jobs/runners/kubernetes.py b/lib/galaxy/jobs/runners/kubernetes.py index 4f4fe0036d1..beb16c9bfc6 100644 --- a/lib/galaxy/jobs/runners/kubernetes.py +++ b/lib/galaxy/jobs/runners/kubernetes.py @@ -3,6 +3,7 @@ Offload jobs to a Kubernetes cluster. """ import logging +import re from os import environ as os_environ from six import text_type @@ -252,8 +253,12 @@ class KubernetesJobRunner(AsynchronousJobRunner): return k8s_cont_image def __get_k8s_container_name(self, job_wrapper): - # TODO check if this is correct - return job_wrapper.job_destination.id + # These must follow a specific regex for Kubernetes. + raw_id = job_wrapper.job_destination.id + cleaned_id = re.sub("[^-a-z0-9]", "-", raw_id) + if cleaned_id.startswith("-") or cleaned_id.endswith("-"): + cleaned_id = "x%sx" % cleaned_id + return cleaned_id def check_watched_item(self, job_state): """Checks the state of a job already submitted on k8s. Job state is a AsynchronousJobState""" diff --git a/lib/galaxy/webapps/tool_shed/api/repositories.py b/lib/galaxy/webapps/tool_shed/api/repositories.py index 57f0c00eb71..033a6260e2d 100644 --- a/lib/galaxy/webapps/tool_shed/api/repositories.py +++ b/lib/galaxy/webapps/tool_shed/api/repositories.py @@ -1132,11 +1132,9 @@ class RepositoriesController( BaseAPIController ): os.remove( uploaded_file_name ) if not ok: return { - "err_msg": message, - "content_alert": content_alert_str + "err_msg": message } else: return { - "message": message, - "content_alert": content_alert_str + "message": message } diff --git a/static/scripts/bundled/admin.bundled.js b/static/scripts/bundled/admin.bundled.js new file mode 100644 index 00000000000..c793acffcef --- /dev/null +++ b/static/scripts/bundled/admin.bundled.js @@ -0,0 +1,2 @@ +webpackJsonp([4],{0:function(e,t,i){(function(e){var t=i(1),s=t,a=i(30).GalaxyApp,l=i(92),n=i(31);window.app=function(t,i){window.Galaxy=new a(t,i),Galaxy.debug("admin app"),Galaxy.params=Galaxy.config.params,s(function(){e.extend(t.config,{active_view:"admin"}),Galaxy.page=new n.View(e.extend(t,{Left:l}))})}}).call(t,i(2))},92:function(e,t,i){(function(t,s,a){var l=i(5),n=t.View.extend({initialize:function(e,i){var s=this;this.page=e,this.root=i.root,this.config=i.config,this.settings=i.settings,this.message=i.message,this.status=i.status,this.model=new t.Model({title:l("Administration")}),this.categories=new t.Collection([{title:"Server",items:[{title:"Data types registry",url:"admin/view_datatypes_registry"},{title:"Data tables registry",url:"admin/view_tool_data_tables"},{title:"Display applications",url:"admin/display_applications"},{title:"Manage jobs",url:"admin/jobs"}]},{title:"Tools and Tool Shed",items:[{title:"Search Tool Shed",url:"admin_toolshed/browse_tool_sheds",enabled:s.settings.is_tool_shed_installed},{title:"Search Tool Shed (Beta)",url:"admin_toolshed/browse_toolsheds",enabled:s.settings.is_tool_shed_installed&&s.config.enable_beta_ts_api_install},{title:"Monitor installing repositories",url:"admin_toolshed/monitor_repository_installation?installing_repository_ids="+s.settings.installing_repository_ids,enabled:s.settings.installing_repository_ids},{title:"Manage installed tools",url:"admin_toolshed/browse_repositories",enabled:s.settings.is_repo_installed},{title:"Reset metadata",url:"admin_toolshed/reset_metadata_on_selected_installed_repositories",enabled:s.settings.is_repo_installed},{title:"Download local tool",url:"admin/package_tool"},{title:"Tool lineage",url:"admin/tool_versions"},{title:"Reload a tool's configuration",url:"admin/reload_tool"},{title:"Review tool migration stages",url:"admin/review_tool_migration_stages"},{title:"View Tool Error Logs",url:"admin/tool_errors"},{title:"Manage Display Whitelist",url:"admin/sanitize_whitelist"},{title:"Manage Tool Dependencies",url:"admin/manage_tool_dependencies"}]},{title:"User Management",items:[{title:"Users",url:"admin/users"},{title:"Groups",url:"admin/groups"},{title:"Roles",url:"admin/roles"},{title:"API keys",url:"userskeys/all_users"},{title:"Impersonate a user",url:"admin/impersonate",enabled:s.config.allow_user_impersonation}]},{title:"Data",items:[{title:"Quotas",url:"admin/quotas",enabled:s.config.enable_quotas},{title:"Data libraries",url:"library_admin/browse_libraries"},{title:"Roles",url:"admin/roles"},{title:"Local data",url:"data_manager"}]},{title:"Form Definitions",items:[{title:"Form definitions",url:"forms/browse_form_definitions"}]},{title:"Sample Tracking",items:[{title:"Sequencers and external services",url:"external_service/browse_external_services"},{title:"Request types",url:"request_type/browse_request_types"},{title:"Sequencing requests",url:"requests_admin/browse_requests"},{title:"Find samples",url:"requests_common/find_samples?cntrller=requests_admin"}]}]),this.setElement(this._template())},render:function(){var e=this;this.$el.empty(),this.categories.each(function(t){var i=s(e._templateSection(t.attributes)),n=i.find(".ui-side-section-body");a.each(t.get("items"),function(t){(void 0===t.enabled||t.enabled)&&n.append(s("
").addClass("ui-side-section-body-title").append(s("").attr({href:e.root+t.url,target:"galaxy_main"}).text(l(t.title))))}),e.$el.append(i)}),this.page.$("#galaxy_main").prop("src",this.root+"admin/center?message="+this.message+"&status="+this.status)},_templateSection:function(e){return["
",'
'+l(e.title)+"
",'
',"
"].join("")},_template:function(){return'
'},toString:function(){return"adminPanel"}});e.exports=n}).call(t,i(3),i(1),i(2))}}); +//# sourceMappingURL=admin.bundled.js.map \ No newline at end of file diff --git a/static/scripts/bundled/admin.bundled.js.map b/static/scripts/bundled/admin.bundled.js.map new file mode 100644 index 00000000000..0a809969ae4 --- /dev/null +++ b/static/scripts/bundled/admin.bundled.js.map @@ -0,0 +1 @@ +{"version":3,"sources":["webpack:///admin.bundled.js","webpack:///./galaxy/scripts/apps/admin.js","webpack:///./galaxy/scripts/apps/panels/admin-panel.js"],"names":["webpackJsonp","0","module","exports","__webpack_require__","_","jQuery","$","GalaxyApp","AdminPanel","Page","window","app","options","bootstrapped","Galaxy","debug","params","config","extend","active_view","page","View","Left","call","92","Backbone","_l","initialize","self","this","root","settings","message","status","model","Model","title","categories","Collection","items","url","enabled","is_tool_shed_installed","enable_beta_ts_api_install","installing_repository_ids","is_repo_installed","allow_user_impersonation","enable_quotas","setElement","_template","render","$el","empty","each","category","$section","_templateSection","attributes","$entries","find","get","item","undefined","append","addClass","attr","href","target","text","prop","join","toString"],"mappings":"AAAAA,cAAc,IAERC,EACA,SAAUC,EAAQC,EAASC,ICHjC,SAAAC,GAAA,GAAIC,GAASF,EAAS,GAClBG,EAAID,EACJE,EAAYJ,EAAS,IAAWI,UAChCC,EAAaL,EAAS,IACtBM,EAAON,EAAS,GAEpBO,QAAOC,IAAM,SAAcC,EAASC,GAChCH,OAAOI,OAAS,GAAIP,GAAWK,EAASC,GACxCC,OAAOC,MAAO,aACdD,OAAOE,OAASF,OAAOG,OAAOD,OAC9BV,EAAE,WACEF,EAAEc,OAAQN,EAAQK,QAAUE,YAAc,UAC1CL,OAAOM,KAAO,GAAIX,GAAKY,KAAMjB,EAAEc,OAAQN,GACnCU,KAAOd,UDSWe,KAAKrB,EAASC,EAAoB,KAI1DqB,GACA,SAAUvB,EAAQC,EAASC,IE3BjC,SAAAsB,EAAAnB,EAAAF,GAAA,GAAIsB,GAAKvB,EAAS,GAEdK,EAAaiB,EAASJ,KAAKH,QAC3BS,WAAY,SAAUP,EAAMR,GACxB,GAAIgB,GAAOC,IACXA,MAAKT,KAAaA,EAClBS,KAAKC,KAAalB,EAAQkB,KAC1BD,KAAKZ,OAAaL,EAAQK,OAC1BY,KAAKE,SAAanB,EAAQmB,SAC1BF,KAAKG,QAAapB,EAAQoB,QAC1BH,KAAKI,OAAarB,EAAQqB,OAC1BJ,KAAKK,MAAQ,GAAIT,GAASU,OACtBC,MAAUV,EAAI,oBAElBG,KAAKQ,WAAa,GAAIZ,GAASa,aAC3BF,MAAQ,SACRG,QACIH,MAAU,sBACVI,IAAU,kCAEVJ,MAAU,uBACVI,IAAU,gCAEVJ,MAAU,uBACVI,IAAU,+BAEVJ,MAAU,cACVI,IAAU,iBAGdJ,MAAQ,sBACRG,QACIH,MAAU,mBACVI,IAAU,mCACVC,QAAUb,EAAKG,SAASW,yBAExBN,MAAU,0BACVI,IAAU,kCACVC,QAAUb,EAAKG,SAASW,wBAA0Bd,EAAKX,OAAO0B,6BAE9DP,MAAU,kCACVI,IAAU,4EAA8EZ,EAAKG,SAASa,0BACtGH,QAAUb,EAAKG,SAASa,4BAExBR,MAAU,yBACVI,IAAU,qCACVC,QAAUb,EAAKG,SAASc,oBAExBT,MAAU,iBACVI,IAAU,mEACVC,QAAUb,EAAKG,SAASc,oBAExBT,MAAU,sBACVI,IAAU,uBAEVJ,MAAU,eACVI,IAAU,wBAEVJ,MAAU,gCACVI,IAAU,sBAEVJ,MAAU,+BACVI,IAAU,uCAEVJ,MAAU,uBACVI,IAAU,sBAEVJ,MAAU,2BACVI,IAAU,6BAEVJ,MAAU,2BACVI,IAAU,qCAGdJ,MAAQ,kBACRG,QACIH,MAAU,QACVI,IAAU,gBAEVJ,MAAU,SACVI,IAAU,iBAEVJ,MAAU,QACVI,IAAU,gBAEVJ,MAAU,WACVI,IAAU,wBAEVJ,MAAU,qBACVI,IAAU,oBACVC,QAAUb,EAAKX,OAAO6B,6BAG1BV,MAAQ,OACRG,QACIH,MAAU,SACVI,IAAU,eACVC,QAAUb,EAAKX,OAAO8B,gBAEtBX,MAAU,iBACVI,IAAU,mCAEVJ,MAAU,QACVI,IAAU,gBAEVJ,MAAU,aACVI,IAAU,mBAGdJ,MAAQ,mBACRG,QACIH,MAAU,mBACVI,IAAU,oCAGdJ,MAAQ,kBACRG,QACIH,MAAU,mCACVI,IAAU,8CAEVJ,MAAU,gBACVI,IAAU,sCAEVJ,MAAU,sBACVI,IAAU,mCAEVJ,MAAU,eACVI,IAAU,4DAGlBX,KAAKmB,WAAYnB,KAAKoB,cAG1BC,OAAS,WACL,GAAItB,GAAOC,IACXA,MAAKsB,IAAIC,QACTvB,KAAKQ,WAAWgB,KAAM,SAAUC,GAC5B,GAAIC,GAAWjD,EAAGsB,EAAK4B,iBAAkBF,EAASG,aAC9CC,EAAWH,EAASI,KAAM,wBAC9BvD,GAAEiD,KAAMC,EAASM,IAAK,SAAW,SAAUC,IACjBC,SAAjBD,EAAKpB,SAAyBoB,EAAKpB,UACpCiB,EAASK,OAAQzD,EAAG,UAAW0D,SAAU,8BACVD,OAAQzD,EAAG,QAAS2D,MACPC,KAAUtC,EAAKE,KAAO+B,EAAKrB,IAC3B2B,OAAU,gBAAiBC,KAAM1C,EAAImC,EAAKzB,YAG9FR,EAAKuB,IAAIY,OAAQR,KAErB1B,KAAKT,KAAKd,EAAG,gBAAiB+D,KAAM,MAAOxC,KAAKC,KAAO,wBAA0BD,KAAKG,QAAU,WAAaH,KAAKI,SAGtHuB,iBAAmB,SAAU5C,GACzB,OACI,QACI,sCAAwCc,EAAId,EAAQwB,OAAU,SAC9D,sCACJ,UACFkC,KAAK,KAGXrB,UAAY,WACR,MAAO,gCAGXsB,SAAW,WAAa,MAAO,eAGnCtE,GAAOC,QAAUM,IF0Bae,KAAKrB,EAASC,EAAoB,GAAIA,EAAoB,GAAIA,EAAoB","file":"admin.bundled.js","sourcesContent":["webpackJsonp([4],{\n\n/***/ 0:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(_) {var jQuery = __webpack_require__(1),\n\t $ = jQuery,\n\t GalaxyApp = __webpack_require__(30).GalaxyApp,\n\t AdminPanel = __webpack_require__(92),\n\t Page = __webpack_require__(31);\n\t\n\twindow.app = function app(options, bootstrapped) {\n\t window.Galaxy = new GalaxyApp(options, bootstrapped);\n\t Galaxy.debug('admin app');\n\t Galaxy.params = Galaxy.config.params;\n\t $(function () {\n\t _.extend(options.config, { active_view: 'admin' });\n\t Galaxy.page = new Page.View(_.extend(options, {\n\t Left: AdminPanel\n\t }));\n\t });\n\t};\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(2)))\n\n/***/ }),\n\n/***/ 92:\n/***/ (function(module, exports, __webpack_require__) {\n\n\t/* WEBPACK VAR INJECTION */(function(Backbone, $, _) {var _l = __webpack_require__(5);\n\t\n\tvar AdminPanel = Backbone.View.extend({\n\t initialize: function (page, options) {\n\t var self = this;\n\t this.page = page;\n\t this.root = options.root;\n\t this.config = options.config;\n\t this.settings = options.settings;\n\t this.message = options.message;\n\t this.status = options.status;\n\t this.model = new Backbone.Model({\n\t title: _l('Administration')\n\t });\n\t this.categories = new Backbone.Collection([{\n\t title: 'Server',\n\t items: [{\n\t title: 'Data types registry',\n\t url: 'admin/view_datatypes_registry'\n\t }, {\n\t title: 'Data tables registry',\n\t url: 'admin/view_tool_data_tables'\n\t }, {\n\t title: 'Display applications',\n\t url: 'admin/display_applications'\n\t }, {\n\t title: 'Manage jobs',\n\t url: 'admin/jobs'\n\t }]\n\t }, {\n\t title: 'Tools and Tool Shed',\n\t items: [{\n\t title: 'Search Tool Shed',\n\t url: 'admin_toolshed/browse_tool_sheds',\n\t enabled: self.settings.is_tool_shed_installed\n\t }, {\n\t title: 'Search Tool Shed (Beta)',\n\t url: 'admin_toolshed/browse_toolsheds',\n\t enabled: self.settings.is_tool_shed_installed && self.config.enable_beta_ts_api_install\n\t }, {\n\t title: 'Monitor installing repositories',\n\t url: 'admin_toolshed/monitor_repository_installation?installing_repository_ids=' + self.settings.installing_repository_ids,\n\t enabled: self.settings.installing_repository_ids\n\t }, {\n\t title: 'Manage installed tools',\n\t url: 'admin_toolshed/browse_repositories',\n\t enabled: self.settings.is_repo_installed\n\t }, {\n\t title: 'Reset metadata',\n\t url: 'admin_toolshed/reset_metadata_on_selected_installed_repositories',\n\t enabled: self.settings.is_repo_installed\n\t }, {\n\t title: 'Download local tool',\n\t url: 'admin/package_tool'\n\t }, {\n\t title: 'Tool lineage',\n\t url: 'admin/tool_versions'\n\t }, {\n\t title: 'Reload a tool\\'s configuration',\n\t url: 'admin/reload_tool'\n\t }, {\n\t title: 'Review tool migration stages',\n\t url: 'admin/review_tool_migration_stages'\n\t }, {\n\t title: 'View Tool Error Logs',\n\t url: 'admin/tool_errors'\n\t }, {\n\t title: 'Manage Display Whitelist',\n\t url: 'admin/sanitize_whitelist'\n\t }, {\n\t title: 'Manage Tool Dependencies',\n\t url: 'admin/manage_tool_dependencies'\n\t }]\n\t }, {\n\t title: 'User Management',\n\t items: [{\n\t title: 'Users',\n\t url: 'admin/users'\n\t }, {\n\t title: 'Groups',\n\t url: 'admin/groups'\n\t }, {\n\t title: 'Roles',\n\t url: 'admin/roles'\n\t }, {\n\t title: 'API keys',\n\t url: 'userskeys/all_users'\n\t }, {\n\t title: 'Impersonate a user',\n\t url: 'admin/impersonate',\n\t enabled: self.config.allow_user_impersonation\n\t }]\n\t }, {\n\t title: 'Data',\n\t items: [{\n\t title: 'Quotas',\n\t url: 'admin/quotas',\n\t enabled: self.config.enable_quotas\n\t }, {\n\t title: 'Data libraries',\n\t url: 'library_admin/browse_libraries'\n\t }, {\n\t title: 'Roles',\n\t url: 'admin/roles'\n\t }, {\n\t title: 'Local data',\n\t url: 'data_manager'\n\t }]\n\t }, {\n\t title: 'Form Definitions',\n\t items: [{\n\t title: 'Form definitions',\n\t url: 'forms/browse_form_definitions'\n\t }]\n\t }, {\n\t title: 'Sample Tracking',\n\t items: [{\n\t title: 'Sequencers and external services',\n\t url: 'external_service/browse_external_services'\n\t }, {\n\t title: 'Request types',\n\t url: 'request_type/browse_request_types'\n\t }, {\n\t title: 'Sequencing requests',\n\t url: 'requests_admin/browse_requests'\n\t }, {\n\t title: 'Find samples',\n\t url: 'requests_common/find_samples?cntrller=requests_admin'\n\t }]\n\t }]);\n\t this.setElement(this._template());\n\t },\n\t\n\t render: function () {\n\t var self = this;\n\t this.$el.empty();\n\t this.categories.each(function (category) {\n\t var $section = $(self._templateSection(category.attributes));\n\t var $entries = $section.find('.ui-side-section-body');\n\t _.each(category.get('items'), function (item) {\n\t if (item.enabled === undefined || item.enabled) {\n\t $entries.append($('
').addClass('ui-side-section-body-title').append($('').attr({\n\t href: self.root + item.url,\n\t target: 'galaxy_main' }).text(_l(item.title))));\n\t }\n\t });\n\t self.$el.append($section);\n\t });\n\t this.page.$('#galaxy_main').prop('src', this.root + 'admin/center?message=' + this.message + '&status=' + this.status);\n\t },\n\t\n\t _templateSection: function (options) {\n\t return ['
', '
' + _l(options.title) + '
', '
', '
'].join('');\n\t },\n\t\n\t _template: function () {\n\t return '
';\n\t },\n\t\n\t toString: function () {\n\t return 'adminPanel';\n\t }\n\t});\n\t\n\tmodule.exports = AdminPanel;\n\t/* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(3), __webpack_require__(1), __webpack_require__(2)))\n\n/***/ })\n\n});\n\n\n// WEBPACK FOOTER //\n// admin.bundled.js","var jQuery = require( 'jquery' ),\n $ = jQuery,\n GalaxyApp = require( 'galaxy' ).GalaxyApp,\n AdminPanel = require( './panels/admin-panel' ),\n Page = require( 'layout/page' );\n\nwindow.app = function app( options, bootstrapped ){\n window.Galaxy = new GalaxyApp( options, bootstrapped );\n Galaxy.debug( 'admin app' );\n Galaxy.params = Galaxy.config.params;\n $(function(){\n _.extend( options.config, { active_view : 'admin' } );\n Galaxy.page = new Page.View( _.extend( options, {\n Left : AdminPanel\n } ) );\n });\n};\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/apps/admin.js","var _l = require( 'utils/localization' );\n\nvar AdminPanel = Backbone.View.extend({\n initialize: function( page, options ) {\n var self = this;\n this.page = page;\n this.root = options.root;\n this.config = options.config;\n this.settings = options.settings;\n this.message = options.message;\n this.status = options.status;\n this.model = new Backbone.Model({\n title : _l( 'Administration' )\n });\n this.categories = new Backbone.Collection([{\n title : 'Server',\n items : [ {\n title : 'Data types registry',\n url : 'admin/view_datatypes_registry'\n },{\n title : 'Data tables registry',\n url : 'admin/view_tool_data_tables'\n },{\n title : 'Display applications',\n url : 'admin/display_applications'\n },{\n title : 'Manage jobs',\n url : 'admin/jobs'\n } ]\n },{\n title : 'Tools and Tool Shed',\n items : [ {\n title : 'Search Tool Shed',\n url : 'admin_toolshed/browse_tool_sheds',\n enabled : self.settings.is_tool_shed_installed\n },{\n title : 'Search Tool Shed (Beta)',\n url : 'admin_toolshed/browse_toolsheds',\n enabled : self.settings.is_tool_shed_installed && self.config.enable_beta_ts_api_install\n },{\n title : 'Monitor installing repositories',\n url : 'admin_toolshed/monitor_repository_installation?installing_repository_ids=' + self.settings.installing_repository_ids,\n enabled : self.settings.installing_repository_ids\n },{\n title : 'Manage installed tools',\n url : 'admin_toolshed/browse_repositories',\n enabled : self.settings.is_repo_installed\n },{\n title : 'Reset metadata',\n url : 'admin_toolshed/reset_metadata_on_selected_installed_repositories',\n enabled : self.settings.is_repo_installed\n },{\n title : 'Download local tool',\n url : 'admin/package_tool'\n },{\n title : 'Tool lineage',\n url : 'admin/tool_versions'\n },{\n title : 'Reload a tool\\'s configuration',\n url : 'admin/reload_tool'\n },{\n title : 'Review tool migration stages',\n url : 'admin/review_tool_migration_stages'\n },{\n title : 'View Tool Error Logs',\n url : 'admin/tool_errors'\n },{\n title : 'Manage Display Whitelist',\n url : 'admin/sanitize_whitelist'\n },{\n title : 'Manage Tool Dependencies',\n url : 'admin/manage_tool_dependencies'\n } ]\n },{\n title : 'User Management',\n items : [ {\n title : 'Users',\n url : 'admin/users'\n },{\n title : 'Groups',\n url : 'admin/groups'\n },{\n title : 'Roles',\n url : 'admin/roles'\n },{\n title : 'API keys',\n url : 'userskeys/all_users'\n },{\n title : 'Impersonate a user',\n url : 'admin/impersonate',\n enabled : self.config.allow_user_impersonation\n } ]\n },{\n title : 'Data',\n items : [ {\n title : 'Quotas',\n url : 'admin/quotas',\n enabled : self.config.enable_quotas\n },{\n title : 'Data libraries',\n url : 'library_admin/browse_libraries'\n },{\n title : 'Roles',\n url : 'admin/roles'\n },{\n title : 'Local data',\n url : 'data_manager'\n } ]\n },{\n title : 'Form Definitions',\n items : [ {\n title : 'Form definitions',\n url : 'forms/browse_form_definitions'\n } ]\n },{\n title : 'Sample Tracking',\n items : [ {\n title : 'Sequencers and external services',\n url : 'external_service/browse_external_services'\n },{\n title : 'Request types',\n url : 'request_type/browse_request_types'\n },{\n title : 'Sequencing requests',\n url : 'requests_admin/browse_requests'\n },{\n title : 'Find samples',\n url : 'requests_common/find_samples?cntrller=requests_admin'\n } ]\n }]);\n this.setElement( this._template() );\n },\n\n render : function() {\n var self = this;\n this.$el.empty();\n this.categories.each( function( category ) {\n var $section = $( self._templateSection( category.attributes ) );\n var $entries = $section.find( '.ui-side-section-body' );\n _.each( category.get( 'items' ), function( item ) {\n if ( item.enabled === undefined || item.enabled ) {\n $entries.append( $( '
' ).addClass( 'ui-side-section-body-title' )\n .append( $( '' ).attr({\n href : self.root + item.url,\n target : 'galaxy_main' }).text( _l( item.title ) ) ) );\n }\n });\n self.$el.append( $section );\n });\n this.page.$( '#galaxy_main' ).prop( 'src', this.root + 'admin/center?message=' + this.message + '&status=' + this.status );\n },\n\n _templateSection : function( options ) {\n return [\n '
',\n '
' + _l( options.title ) + '
',\n '
',\n '
'\n ].join('');\n },\n\n _template : function() {\n return '
';\n },\n\n toString : function() { return 'adminPanel' }\n});\n\nmodule.exports = AdminPanel;\n\n\n// WEBPACK FOOTER //\n// ./galaxy/scripts/apps/panels/admin-panel.js"],"sourceRoot":""} \ No newline at end of file diff --git a/test/galaxy_selenium/navigates_galaxy.py b/test/galaxy_selenium/navigates_galaxy.py index 3260537b0eb..b9f53e1ac43 100644 --- a/test/galaxy_selenium/navigates_galaxy.py +++ b/test/galaxy_selenium/navigates_galaxy.py @@ -449,7 +449,8 @@ class NavigatesGalaxy(HasDriver): self.click_xpath(self.navigation_data["selectors"]["masthead"]["workflow"]) def click_button_new_workflow(self): - self.click_selector(self.navigation_data["selectors"]["workflows"]["new_button"]) + element = self.wait_for_selector_clickable(self.navigation_data["selectors"]["workflows"]["new_button"]) + element.click() def wait_for_sizzle_selector_clickable(self, selector): element = self._wait_on(