mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Merge remote-tracking branch 'upstream/release_15.05' into dev
Conflicts: lib/galaxy/version.py
This commit is contained in:
@@ -39,7 +39,7 @@ function validate (value) {
|
||||
return false;
|
||||
}
|
||||
for (var i in value) {
|
||||
if (['__null__', '__undefined__', 'None', null, undefined].indexOf(value[i]) > -1) {
|
||||
if (['__null__', '__undefined__', null, undefined].indexOf(value[i]) > -1) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,3 @@
|
||||
div.floatright {
|
||||
float: right;
|
||||
}
|
||||
@@ -0,0 +1,5 @@
|
||||
{# layout.html #}
|
||||
{# Import the theme's layout. #}
|
||||
{% extends "!layout.html" %}
|
||||
|
||||
{% set css_files = css_files + ['_static/style.css'] %}
|
||||
@@ -46,6 +46,8 @@ Contents
|
||||
|
||||
Application Documentation <lib/modules>
|
||||
|
||||
Releases <releases/index>
|
||||
|
||||
Indices and tables
|
||||
==================
|
||||
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
===========================================================
|
||||
January 2013 Galaxy Release (v 13.01)
|
||||
===========================================================
|
||||
|
||||
.. include:: _header.rst
|
||||
|
||||
Please see the `Galaxy wiki`_ for announcement and release notes.
|
||||
|
||||
.. _Galaxy wiki: https://wiki.galaxyproject.org/News/2013_01_11_DistributionNewsBrief
|
||||
|
||||
.. include:: _thanks.rst
|
||||
@@ -0,0 +1,11 @@
|
||||
===========================================================
|
||||
February 2013 Galaxy Release (v 13.02)
|
||||
===========================================================
|
||||
|
||||
.. include:: _header.rst
|
||||
|
||||
Please see the `Galaxy wiki`_ for announcement and release notes.
|
||||
|
||||
.. _Galaxy wiki: https://wiki.galaxyproject.org/News/2013_02_08_GalaxyNewsBrief
|
||||
|
||||
.. include:: _thanks.rst
|
||||
@@ -0,0 +1,11 @@
|
||||
===========================================================
|
||||
April 2013 Galaxy Release (v 13.04)
|
||||
===========================================================
|
||||
|
||||
.. include:: _header.rst
|
||||
|
||||
Please see the `Galaxy wiki`_ for announcement and release notes.
|
||||
|
||||
.. _Galaxy wiki: https://wiki.galaxyproject.org/News/2013_04_01_Galaxy_Distribution
|
||||
|
||||
.. include:: _thanks.rst
|
||||
@@ -0,0 +1,11 @@
|
||||
===========================================================
|
||||
June 2013 Galaxy Release (v 13.06)
|
||||
===========================================================
|
||||
|
||||
.. include:: _header.rst
|
||||
|
||||
Please see the `Galaxy wiki`_ for announcement and release notes.
|
||||
|
||||
.. _Galaxy wiki: https://wiki.galaxyproject.org/News/2013_06_03_Galaxy_Distribution
|
||||
|
||||
.. include:: _thanks.rst
|
||||
@@ -0,0 +1,11 @@
|
||||
===========================================================
|
||||
August 2013 Galaxy Release (v 13.08)
|
||||
===========================================================
|
||||
|
||||
.. include:: _header.rst
|
||||
|
||||
Please see the `Galaxy wiki`_ for announcement and release notes.
|
||||
|
||||
.. _Galaxy wiki: https://wiki.galaxyproject.org/News/2013_08_12_Galaxy_Distribution
|
||||
|
||||
.. include:: _thanks.rst
|
||||
@@ -0,0 +1,11 @@
|
||||
===========================================================
|
||||
November 2013 Galaxy Release (v 13.11)
|
||||
===========================================================
|
||||
|
||||
.. include:: _header.rst
|
||||
|
||||
Please see the `Galaxy wiki`_ for announcement and release notes.
|
||||
|
||||
.. _Galaxy wiki: https://wiki.galaxyproject.org/News/2013_11_04_Galaxy_Distribution
|
||||
|
||||
.. include:: _thanks.rst
|
||||
@@ -0,0 +1,11 @@
|
||||
===========================================================
|
||||
February 2014 Galaxy Release (v 14.02)
|
||||
===========================================================
|
||||
|
||||
.. include:: _header.rst
|
||||
|
||||
Please see the `Galaxy wiki`_ for announcement and release notes.
|
||||
|
||||
.. _Galaxy wiki: https://wiki.galaxyproject.org/News/2014_02_10_Galaxy_Distribution
|
||||
|
||||
.. include:: _thanks.rst
|
||||
@@ -0,0 +1,11 @@
|
||||
===========================================================
|
||||
April 2014 Galaxy Release (v 14.04)
|
||||
===========================================================
|
||||
|
||||
.. include:: _header.rst
|
||||
|
||||
Please see the `Galaxy wiki`_ for announcement and release notes.
|
||||
|
||||
.. _Galaxy wiki: https://wiki.galaxyproject.org/News/2014_04_14_Galaxy_Distribution
|
||||
|
||||
.. include:: _thanks.rst
|
||||
@@ -0,0 +1,11 @@
|
||||
===========================================================
|
||||
June 2014 Galaxy Release (v 14.06)
|
||||
===========================================================
|
||||
|
||||
.. include:: _header.rst
|
||||
|
||||
Please see the `Galaxy wiki`_ for announcement and release notes.
|
||||
|
||||
.. _Galaxy wiki: https://wiki.galaxyproject.org/News/2014_06_02_Galaxy_Distribution
|
||||
|
||||
.. include:: _thanks.rst
|
||||
@@ -0,0 +1,11 @@
|
||||
===========================================================
|
||||
August 2014 Galaxy Release (v 14.08)
|
||||
===========================================================
|
||||
|
||||
.. include:: _header.rst
|
||||
|
||||
Please see the `Galaxy wiki`_ for announcement and release notes.
|
||||
|
||||
.. _Galaxy wiki: https://wiki.galaxyproject.org/News/2014_08_11_Galaxy_Distribution
|
||||
|
||||
.. include:: _thanks.rst
|
||||
@@ -0,0 +1,11 @@
|
||||
===========================================================
|
||||
October 2014 Galaxy Release (v 14.10)
|
||||
===========================================================
|
||||
|
||||
.. include:: _header.rst
|
||||
|
||||
Please see the `Galaxy wiki`_ for announcement and release notes.
|
||||
|
||||
.. _Galaxy wiki: https://wiki.galaxyproject.org/News/2014_10_06_Galaxy_Distribution
|
||||
|
||||
.. include:: _thanks.rst
|
||||
@@ -0,0 +1,11 @@
|
||||
===========================================================
|
||||
January 2015 Galaxy Release (v 15.01)
|
||||
===========================================================
|
||||
|
||||
.. include:: _header.rst
|
||||
|
||||
Please see the `Galaxy wiki`_ for announcement and release notes.
|
||||
|
||||
.. _Galaxy wiki: https://wiki.galaxyproject.org/News/2015_01_13_Galaxy_Distribution
|
||||
|
||||
.. include:: _thanks.rst
|
||||
@@ -0,0 +1,11 @@
|
||||
===========================================================
|
||||
March 2015 Galaxy Release (v 15.03)
|
||||
===========================================================
|
||||
|
||||
.. include:: _header.rst
|
||||
|
||||
Please see the `Galaxy wiki`_ for announcement and release notes.
|
||||
|
||||
.. _Galaxy wiki: https://wiki.galaxyproject.org/News/2015_03_GalaxyRelease
|
||||
|
||||
.. include:: _thanks.rst
|
||||
@@ -0,0 +1,358 @@
|
||||
.. to_doc
|
||||
|
||||
-------------------------------
|
||||
15.05
|
||||
-------------------------------
|
||||
|
||||
.. enhancements
|
||||
|
||||
Enhancements
|
||||
-------------------------------
|
||||
|
||||
.. starthighlight
|
||||
* Pluggable framework to custom authentication (including new LDAP/Active
|
||||
Directory integration). Thanks to many including Andrew Robinson,
|
||||
Nicola Soranzo, and David Trudgian. `Pull Request 1`_, `Pull Request 33`_,
|
||||
`Pull Request 51`_, `Pull Request 75`_, `Pull Request 98`_,
|
||||
`Pull Request 216`_
|
||||
* Implement a new ``section`` tag for tool parameters. `Pull Request 35`_,
|
||||
`Trello <https://trello.com/c/KxlQK0FB>`__
|
||||
* New UI widgets allowing much more flexibility when creating simple dataset
|
||||
pair and list collections. `Pull Request 134`_,
|
||||
`Trello <https://trello.com/c/xCdFQPBW>`__
|
||||
.. endhighlight
|
||||
* Improved JavaScript build system for client code and libraries (now
|
||||
using uglify_ and featuring `Source Maps`_). 72c876c_, 9a7f5fc_, 648a623_,
|
||||
22f280f_, `Trello <https://trello.com/c/7midE7Bx>`__
|
||||
* Add an `External Display Application`_ for viewing GFF/GTF files with IGV_.
|
||||
`Pull Request 70`_, `Trello <https://trello.com/c/Hfg3gYsL>`__
|
||||
* Use TravisCI_ and Tox_ for continuous integration testing.
|
||||
`Pull Request 40`_, `Pull Request 62`_, `Pull Request 97`_,
|
||||
`Pull Request 99`_, `Pull Request 123`_, `Pull Request 222`_,
|
||||
`Pull Request 235`_,
|
||||
* Infrastructure for improved toolbox and Tool Shed searching.
|
||||
`Pull Request 9`_, `Pull Request 116`_, `Pull Request 142`_,
|
||||
`Pull Request 226`_, c2eb74c_, 2bf52fe_, ec549db_,
|
||||
`Trello <https://trello.com/c/YJW1dCkB>`__, `Trello <https://trello.com/c/AG3qYRZe>`__
|
||||
* Enhance UI to allow renaming dataset collections. 21d1d6b_
|
||||
* Improve highlighting of current/active content history panel.
|
||||
`Pull Request 126`_
|
||||
* Improvements to UI and API for histories and collections. e36e51e_,
|
||||
1e55206_, 0c79680_
|
||||
* Update history dataset API to account for job re-submission. b4cf49a_
|
||||
* Allow recalculating user disk usage from the admin interface. 964e081_
|
||||
* Collect significantly more metadata for BAM files. `Pull Request 107`_,
|
||||
`Pull Request 108`_
|
||||
* Implement ``detect_errors`` attribute on command of tool XML.
|
||||
`Pull Request 117`_
|
||||
* Allow setting ``auto_format="True"`` on tool ``output`` tags.
|
||||
`Pull Request 130`_
|
||||
* Allow testing tool outputs based on MD5 hashes. `Pull Request 125`_
|
||||
* Improved Cheetah type casting for int/float values. `Pull Request 121`_
|
||||
* Add option to pass arbitrary parameters to gem install as part of
|
||||
the tool shed ``setup_ruby_environment`` Tool Shed install action -
|
||||
thanks to Björn Grüning. `Pull Request 118`_
|
||||
* Add ``argument`` attribute to tool parameters. `Pull Request 8`_
|
||||
* Improve link and message that appears after workflows are run.
|
||||
`Pull Request 143`_
|
||||
* Add NCBI SRA datatype - thanks to Matt Shirley. `Pull Request 87`_
|
||||
* Stronger toolbox filtering. `Pull Request 119`_
|
||||
* Allow updating Tool Shed repositories via the API - thanks to Eric Rasche.
|
||||
`Pull Request 30`_
|
||||
* Expose category list in show call for Tool Shed repositories - thanks to
|
||||
Eric Rasche. `Pull Request 29`_
|
||||
* Add API endpoint to create Tool Shed repositories. `Pull Request 2`_
|
||||
* Do not configure Galaxy to use the test Tool Shed by default.
|
||||
`Pull Request 38`_
|
||||
* Add fields and improve display of Tool Shed repositories.
|
||||
a24e206_, d6d61bc_, `Trello <https://trello.com/c/g1dt8WhA>`__
|
||||
* Enhance multi-selection widgets to allow key combinations ``Ctrl-A``
|
||||
and ``Ctrl-X``. e8564d7_, `Trello <https://trello.com/c/3QhD5l5h>`__
|
||||
* New, consistent button for displaying citation BibTeX. `Pull Request 19`_
|
||||
* Improved ``README`` reflecting move to Github - thanks in part to Eric
|
||||
Rasche. `PR #2 (old repo)
|
||||
<https://github.com/galaxyproject/galaxy-beta1/pull/2>`__,
|
||||
226e826_, 2650d09_, 7d5dde8_
|
||||
* Update application to use new logo. 2748f9d_, `Pull Request 187`_,
|
||||
`Pull Request 206`_
|
||||
* Update many documentation links to use https sites - thanks to
|
||||
Nicola Soranzo. 8254cab_
|
||||
* Sync report options config with ``galaxy.ini`` - thanks to Björn Grüning.
|
||||
`Pull Request 12`_
|
||||
* Eliminate need to use API key to list tools via API. cd7abe8_
|
||||
* Restore function necessary for splitting sequence datatypes - thanks to
|
||||
Roberto Alonso. `Pull Request 5`_
|
||||
* Suppress filenames in SAM merge using ``egrep`` - thanks to Peter Cock
|
||||
and Roberto Alonso. `Pull Request 4`_
|
||||
* Option to sort counts in ``Count1`` tool (``tools/filters/uniq.xml``) -
|
||||
thanks to Peter Cock. `Pull Request 16`_
|
||||
* Preserve spaces in ``Count1`` tool (``tools/filters/uniq.xml``) - thanks to
|
||||
Peter Cock. `Pull Request 13`_
|
||||
* `Interactive Environments`_ improvements and fixes from multiple
|
||||
developers including Eric Rasche and Björn Grüning. `Pull Request 69`_,
|
||||
`Pull Request 73`_, `Pull Request 131`_, `Pull Request 135`_,
|
||||
`Pull Request 152`_, `Pull Request 197`_
|
||||
* Enable multi-part upload for exporting files with the GenomeSpace export
|
||||
tool. `Pull Request 74`_, `Trello <https://trello.com/c/28O46iln>`__
|
||||
* Large refactoring, expansion, and increase in test coverage for "managers".
|
||||
`Pull Request 76`_
|
||||
* Improved display of headers in tool help. 157eba6_,
|
||||
`Biostar <https://biostar.usegalaxy.org/p/11211/>`__
|
||||
* Uniform configuration of "From" field for sent emails - thanks to Nicola
|
||||
Soranzo. `Pull Request 23`_
|
||||
* Allow setting ``job_conf.xml`` params via environment variables &
|
||||
``galaxy.ini``. dde2fc9_
|
||||
* Allow a tool data table to declare that duplicate entries are not
|
||||
allowed. `Pull Request 245`_
|
||||
* Add verbose test error flag option in run_tests.sh. 62f0495_
|
||||
* Update ``.gitignore`` to include ``run_api_tests.html``. b52cc98_
|
||||
* Add experimental options to run tests in Docker. e99adb5_
|
||||
* Improve ``run_test.sh --help`` documentation to detail running specific
|
||||
tests. `Pull Request 86`_
|
||||
* Remove older, redundant history tests. `Pull Request 120`_,
|
||||
`Trello <https://trello.com/c/p6oOVhGp>`__
|
||||
* Add test tool demonstrating citing a Github repository. 65def71_
|
||||
* Add option to track all automated changes to the integrated tool panel.
|
||||
10bb492_
|
||||
* Make tool version explicit in all distribution tool - thanks to Peter Cock.
|
||||
`Pull Request 14`_.
|
||||
* Relocate the external metadata setting script. `Pull Request 7`_
|
||||
* Parameterize script used to pull new builds from the UCSC Browser.
|
||||
e4e5df0_
|
||||
* Enhance jobs and workflow logging to report timings. 06346a4_
|
||||
* Add debug message for dynamic options exceptions. `Pull Request 91`_
|
||||
* Remove demo sequencer app. 3af3bf5_
|
||||
* Tweaks to the Pulsar's handling of async messages. `Pull Request 109`_
|
||||
* Return more specific API authentication errors. 71a64ca_
|
||||
* Upgrade Python dependency sqlalchemy to 1.0.0. d725aab_, `Pull Request 129`_
|
||||
* Upgrade Python dependency amqp to 1.4.6. `Pull Request 128`_
|
||||
* Upgrade Python dependency kombu to 3.0.24. `Pull Request 128`_
|
||||
* Upgrade JavaScript dependency raven.js to 1.1.17. bcd1701_
|
||||
|
||||
.. fixes
|
||||
|
||||
Fixes
|
||||
-------------------------------
|
||||
|
||||
* During the 15.05 development cycle dozens of fixes were pushed to the
|
||||
``release_15.03`` branch of Galaxy. These are all included in 15.05 and
|
||||
summarized `here
|
||||
<https://github.com/galaxyproject/galaxy/compare/v15.03...release_15.03>`__
|
||||
(with special thanks to Björn Grüning and Marius van den Beek).
|
||||
* Fix race condition that would occasionally prevent Galaxy from starting
|
||||
properly. `Pull Request 198`_, `Trello <https://trello.com/c/WVlaLsOh>`__
|
||||
* Fix scatter plot API communications for certain proxied Galaxy instances -
|
||||
thanks to @yhoogstrate. `Pull Request 89`_
|
||||
* Fix bug in collectl_ job metrics plugin - thanks to Carrie Ganote.
|
||||
`Pull Request 231`_
|
||||
* Fix late validation of tool parameters. `Pull Request 115`_
|
||||
* Fix ``fasta_to_tabular_converter.py`` (for implicit conversion) - thanks to
|
||||
Peter Cock. `Pull Request 11`_
|
||||
* Fix to eliminate race condition by collecting extra files before declaring
|
||||
dataset's OK. `Pull Request 48`_
|
||||
* Fix setting current history for certain proxied Galaxy instances - thanks
|
||||
to @wezen. 6946e46_.
|
||||
* Fix typo in tool failure testing example - thanks to Peter Cock.
|
||||
`Pull Request 18`_.
|
||||
* Fix Galaxy to default to using SSL for communicating with Tool Sheds.
|
||||
0b037a2_
|
||||
* Fix data source tools to open in ``_top`` window.
|
||||
`Pull Request 17`_
|
||||
* Fix to fallback to name for tool parameters without labels.
|
||||
`Pull Request 189`_, `Trello <https://trello.com/c/Y2xbXqzZ>`__
|
||||
* Fix to remove redundant version ids in tool version selector.
|
||||
`Pull Request 244`_
|
||||
* Fix for downloading metadata files. `Pull Request 234`_
|
||||
* Fix for history failing to render if it contains more exotic dataset
|
||||
collection types. `Pull Request 196`_
|
||||
* Fixes for BaseURLToolParameter. `Pull Request 247`_
|
||||
* Fix to suppress pysam binary incompatibility warning when using datatypes
|
||||
in ``binary.py``. `Pull Request 252`_
|
||||
* Fix for library UI duplication bug. `Pull Request 179`_
|
||||
* Fix for `Backbone.js`_ loading as AMD_. 4e5218f_
|
||||
* Other small Tool Shed fixes. 815f86f_, 76e0915_
|
||||
* Fix file closing in ``lped_to_pbed_converter``. 182b67f_
|
||||
* Fix undefined variables in Tool Shed ``add_repository_entry`` API script.
|
||||
47e6f08_
|
||||
* Fix user registration to respect use_panels when in the Galaxy app.
|
||||
7ac8631_, `Trello <https://trello.com/c/lA1mdDrP>`__
|
||||
* Fix bug in scramble exception, incorrect reference to source_path 79d50d8_
|
||||
* Fix error handling in ``pbed_to_lped``. 7aecd7a_
|
||||
* Fix error handling in Tool Shed step handler for ``chmod`` action. 1454396_
|
||||
* Fix ``__safe_string_wrapper`` in tool evaluation object_wrapper. ab6f13e_
|
||||
* Fixes for data types and data providers. c1d2d1f_, 8da70bb_, 0b83b1e_
|
||||
* Fixes for Tool Shed commit and mercurial handling modules. 6102edf_,
|
||||
b639bc0_, debea9d_
|
||||
* Fix to clean working directory during job re-submission. `Pull Request 236`_
|
||||
* Fix bug when task splitting jobs fail. `Pull Request 214`_
|
||||
* Fix some minor typos in comment docs in ``config/galaxy.ini.sample``.
|
||||
`Pull Request 210`_
|
||||
* Fix admin disk usage message. `Pull Request 205`_,
|
||||
`Trello <https://trello.com/c/2pdw2dK8>`__
|
||||
* Fix to sessionStorage Model to suppress QUOTA DOMExceptions when Safari
|
||||
users are in private browsing mode. 0c94f04_
|
||||
|
||||
.. _IGV: https://www.broadinstitute.org/igv/
|
||||
.. _External Display Application: https://wiki.galaxyproject.org/Admin/Tools/External%20Display%20Applications%20Tutorial
|
||||
.. _Interactive Environments: https://wiki.galaxyproject.org/Admin/IEs
|
||||
.. _TravisCI: https://travis-ci.org/
|
||||
.. _Tox: https://testrun.org/tox/latest/
|
||||
.. _Source Maps: https://developer.chrome.com/devtools/docs/javascript-debugging#source-maps
|
||||
.. _uglify: https://developer.chrome.com/devtools/docs/javascript-debugging#source-maps
|
||||
.. _collectl: http://collectl.sourceforge.net/
|
||||
.. _Backbone.js: http://backbonejs.org/
|
||||
.. _AMD: http://requirejs.org/docs/whyamd.html
|
||||
|
||||
.. github_links
|
||||
.. _Pull Request 129: https://github.com/galaxyproject/galaxy/pull/129
|
||||
.. _Pull Request 128: https://github.com/galaxyproject/galaxy/pull/128
|
||||
.. _Pull Request 2: https://github.com/galaxyproject/galaxy/pull/2
|
||||
.. _Pull Request 247: https://github.com/galaxyproject/galaxy/pull/247
|
||||
.. _Pull Request 252: https://github.com/galaxyproject/galaxy/pull/252
|
||||
.. _Pull Request 245: https://github.com/galaxyproject/galaxy/pull/245
|
||||
.. _Pull Request 244: https://github.com/galaxyproject/galaxy/pull/244
|
||||
.. _Pull Request 236: https://github.com/galaxyproject/galaxy/pull/236
|
||||
.. _Pull Request 235: https://github.com/galaxyproject/galaxy/pull/235
|
||||
.. _Pull Request 222: https://github.com/galaxyproject/galaxy/pull/222
|
||||
.. _Pull Request 234: https://github.com/galaxyproject/galaxy/pull/234
|
||||
.. _Pull Request 231: https://github.com/galaxyproject/galaxy/pull/231
|
||||
.. _Pull Request 226: https://github.com/galaxyproject/galaxy/pull/226
|
||||
.. _Pull Request 216: https://github.com/galaxyproject/galaxy/pull/216
|
||||
.. _Pull Request 215: https://github.com/galaxyproject/galaxy/pull/215
|
||||
.. _Pull Request 214: https://github.com/galaxyproject/galaxy/pull/214
|
||||
.. _Pull Request 198: https://github.com/galaxyproject/galaxy/pull/198
|
||||
.. _Pull Request 210: https://github.com/galaxyproject/galaxy/pull/210
|
||||
.. _Pull Request 206: https://github.com/galaxyproject/galaxy/pull/206
|
||||
.. _Pull Request 205: https://github.com/galaxyproject/galaxy/pull/205
|
||||
.. _Pull Request 197: https://github.com/galaxyproject/galaxy/pull/197
|
||||
.. _Pull Request 196: https://github.com/galaxyproject/galaxy/pull/196
|
||||
.. _Pull Request 189: https://github.com/galaxyproject/galaxy/pull/189
|
||||
.. _Pull Request 187: https://github.com/galaxyproject/galaxy/pull/187
|
||||
.. _Pull Request 179: https://github.com/galaxyproject/galaxy/pull/179
|
||||
.. _Pull Request 153: https://github.com/galaxyproject/galaxy/pull/153
|
||||
.. _Pull Request 152: https://github.com/galaxyproject/galaxy/pull/152
|
||||
.. _5abb8ad: https://github.com/galaxyproject/galaxy/commit/5abb8ad
|
||||
.. _Pull Request 130: https://github.com/galaxyproject/galaxy/pull/130
|
||||
.. _Pull Request 146: https://github.com/galaxyproject/galaxy/pull/146
|
||||
.. _Pull Request 135: https://github.com/galaxyproject/galaxy/pull/135
|
||||
.. _Pull Request 143: https://github.com/galaxyproject/galaxy/pull/143
|
||||
.. _Pull Request 142: https://github.com/galaxyproject/galaxy/pull/142
|
||||
.. _Pull Request 131: https://github.com/galaxyproject/galaxy/pull/131
|
||||
.. _d725aab: https://github.com/galaxyproject/galaxy/commit/d725aab
|
||||
.. _Pull Request 126: https://github.com/galaxyproject/galaxy/pull/126
|
||||
.. _e09761e: https://github.com/galaxyproject/galaxy/commit/e09761e
|
||||
.. _8d3c531: https://github.com/galaxyproject/galaxy/commit/8d3c531
|
||||
.. _Pull Request 125: https://github.com/galaxyproject/galaxy/pull/125
|
||||
.. _Pull Request 123: https://github.com/galaxyproject/galaxy/pull/123
|
||||
.. _Pull Request 121: https://github.com/galaxyproject/galaxy/pull/121
|
||||
.. _Pull Request 120: https://github.com/galaxyproject/galaxy/pull/120
|
||||
.. _Pull Request 119: https://github.com/galaxyproject/galaxy/pull/119
|
||||
.. _Pull Request 117: https://github.com/galaxyproject/galaxy/pull/117
|
||||
.. _Pull Request 118: https://github.com/galaxyproject/galaxy/pull/118
|
||||
.. _Pull Request 134: https://github.com/galaxyproject/galaxy/pull/134
|
||||
.. _Pull Request 116: https://github.com/galaxyproject/galaxy/pull/116
|
||||
.. _Pull Request 109: https://github.com/galaxyproject/galaxy/pull/109
|
||||
.. _647cf55: https://github.com/galaxyproject/galaxy/commit/647cf55
|
||||
.. _Pull Request 108: https://github.com/galaxyproject/galaxy/pull/108
|
||||
.. _Pull Request 107: https://github.com/galaxyproject/galaxy/pull/107
|
||||
.. _8254cab: https://github.com/galaxyproject/galaxy/commit/8254cab
|
||||
.. _Pull Request 99: https://github.com/galaxyproject/galaxy/pull/99
|
||||
.. _Pull Request 98: https://github.com/galaxyproject/galaxy/pull/98
|
||||
.. _Pull Request 115: https://github.com/galaxyproject/galaxy/pull/115
|
||||
.. _Pull Request 97: https://github.com/galaxyproject/galaxy/pull/97
|
||||
.. _Pull Request 91: https://github.com/galaxyproject/galaxy/pull/91
|
||||
.. _Pull Request 89: https://github.com/galaxyproject/galaxy/pull/89
|
||||
.. _Pull Request 86: https://github.com/galaxyproject/galaxy/pull/86
|
||||
.. _Pull Request 87: https://github.com/galaxyproject/galaxy/pull/87
|
||||
.. _Pull Request 73: https://github.com/galaxyproject/galaxy/pull/73
|
||||
.. _Pull Request 74: https://github.com/galaxyproject/galaxy/pull/74
|
||||
.. _Pull Request 75: https://github.com/galaxyproject/galaxy/pull/75
|
||||
.. _Pull Request 70: https://github.com/galaxyproject/galaxy/pull/70
|
||||
.. _Pull Request 69: https://github.com/galaxyproject/galaxy/pull/69
|
||||
.. _Pull Request 62: https://github.com/galaxyproject/galaxy/pull/62
|
||||
.. _Pull Request 51: https://github.com/galaxyproject/galaxy/pull/51
|
||||
.. _Pull Request 76: https://github.com/galaxyproject/galaxy/pull/76
|
||||
.. _2650d09: https://github.com/galaxyproject/galaxy/commit/2650d09
|
||||
.. _7d5dde8: https://github.com/galaxyproject/galaxy/commit/7d5dde8
|
||||
.. _2748f9d: https://github.com/galaxyproject/galaxy/commit/2748f9d
|
||||
.. _d6d61bc: https://github.com/galaxyproject/galaxy/commit/d6d61bc
|
||||
.. _815f86f: https://github.com/galaxyproject/galaxy/commit/815f86f
|
||||
.. _76e0915: https://github.com/galaxyproject/galaxy/commit/76e0915
|
||||
.. _bce8171: https://github.com/galaxyproject/galaxy/commit/bce8171
|
||||
.. _06346a4: https://github.com/galaxyproject/galaxy/commit/06346a4
|
||||
.. _b4cf49a: https://github.com/galaxyproject/galaxy/commit/b4cf49a
|
||||
.. _Pull Request 40: https://github.com/galaxyproject/galaxy/pull/40
|
||||
.. _Pull Request 38: https://github.com/galaxyproject/galaxy/pull/38
|
||||
.. _a24e206: https://github.com/galaxyproject/galaxy/commit/a24e206
|
||||
.. _Pull Request 35: https://github.com/galaxyproject/galaxy/pull/35
|
||||
.. _e36e51e: https://github.com/galaxyproject/galaxy/commit/e36e51e
|
||||
.. _1e55206: https://github.com/galaxyproject/galaxy/commit/1e55206
|
||||
.. _0c79680: https://github.com/galaxyproject/galaxy/commit/0c79680
|
||||
.. _Pull Request 1: https://github.com/galaxyproject/galaxy/pull/1
|
||||
.. _Pull Request 33: https://github.com/galaxyproject/galaxy/pull/33
|
||||
.. _Pull Request 48: https://github.com/galaxyproject/galaxy/pull/48
|
||||
.. _21d1d6b: https://github.com/galaxyproject/galaxy/commit/21d1d6b
|
||||
.. _Pull Request 30: https://github.com/galaxyproject/galaxy/pull/30
|
||||
.. _Pull Request 29: https://github.com/galaxyproject/galaxy/pull/29
|
||||
.. _c0e5509: https://github.com/galaxyproject/galaxy/commit/c0e5509
|
||||
.. _157eba6: https://github.com/galaxyproject/galaxy/commit/157eba6
|
||||
.. _72c876c: https://github.com/galaxyproject/galaxy/commit/72c876c
|
||||
.. _9a7f5fc: https://github.com/galaxyproject/galaxy/commit/9a7f5fc
|
||||
.. _648a623: https://github.com/galaxyproject/galaxy/commit/648a623
|
||||
.. _59028c0: https://github.com/galaxyproject/galaxy/commit/59028c0
|
||||
.. _bcd1701: https://github.com/galaxyproject/galaxy/commit/bcd1701
|
||||
.. _22f280f: https://github.com/galaxyproject/galaxy/commit/22f280f
|
||||
.. _6946e46: https://github.com/galaxyproject/galaxy/commit/6946e46
|
||||
.. _65def71: https://github.com/galaxyproject/galaxy/commit/65def71
|
||||
.. _4e5218f: https://github.com/galaxyproject/galaxy/commit/4e5218f
|
||||
.. _Pull Request 16: https://github.com/galaxyproject/galaxy/pull/16
|
||||
.. _Pull Request 13: https://github.com/galaxyproject/galaxy/pull/13
|
||||
.. _e8564d7: https://github.com/galaxyproject/galaxy/commit/e8564d7
|
||||
.. _Pull Request 23: https://github.com/galaxyproject/galaxy/pull/23
|
||||
.. _Pull Request 22: https://github.com/galaxyproject/galaxy/pull/22
|
||||
.. _10bb492: https://github.com/galaxyproject/galaxy/commit/10bb492
|
||||
.. _Pull Request 19: https://github.com/galaxyproject/galaxy/pull/19
|
||||
.. _Pull Request 18: https://github.com/galaxyproject/galaxy/pull/18
|
||||
.. _0b037a2: https://github.com/galaxyproject/galaxy/commit/0b037a2
|
||||
.. _Pull Request 17: https://github.com/galaxyproject/galaxy/pull/17
|
||||
.. _b29a5e9: https://github.com/galaxyproject/galaxy/commit/b29a5e9
|
||||
.. _Pull Request 14: https://github.com/galaxyproject/galaxy/pull/14
|
||||
.. _7aecd7a: https://github.com/galaxyproject/galaxy/commit/7aecd7a
|
||||
.. _Pull Request 12: https://github.com/galaxyproject/galaxy/pull/12
|
||||
.. _cd7abe8: https://github.com/galaxyproject/galaxy/commit/cd7abe8
|
||||
.. _62f0495: https://github.com/galaxyproject/galaxy/commit/62f0495
|
||||
.. _Pull Request 11: https://github.com/galaxyproject/galaxy/pull/11
|
||||
.. _Pull Request 9: https://github.com/galaxyproject/galaxy/pull/9
|
||||
.. _632ec4e: https://github.com/galaxyproject/galaxy/commit/632ec4e
|
||||
.. _Pull Request 8: https://github.com/galaxyproject/galaxy/pull/8
|
||||
.. _Pull Request 7: https://github.com/galaxyproject/galaxy/pull/7
|
||||
.. _b52cc98: https://github.com/galaxyproject/galaxy/commit/b52cc98
|
||||
.. _1454396: https://github.com/galaxyproject/galaxy/commit/1454396
|
||||
.. _8da70bb: https://github.com/galaxyproject/galaxy/commit/8da70bb
|
||||
.. _b639bc0: https://github.com/galaxyproject/galaxy/commit/b639bc0
|
||||
.. _ab6f13e: https://github.com/galaxyproject/galaxy/commit/ab6f13e
|
||||
.. _debea9d: https://github.com/galaxyproject/galaxy/commit/debea9d
|
||||
.. _6102edf: https://github.com/galaxyproject/galaxy/commit/6102edf
|
||||
.. _c1d2d1f: https://github.com/galaxyproject/galaxy/commit/c1d2d1f
|
||||
.. _0b83b1e: https://github.com/galaxyproject/galaxy/commit/0b83b1e
|
||||
.. _216fb95: https://github.com/galaxyproject/galaxy/commit/216fb95
|
||||
.. _182b67f: https://github.com/galaxyproject/galaxy/commit/182b67f
|
||||
.. _47e6f08: https://github.com/galaxyproject/galaxy/commit/47e6f08
|
||||
.. _7ac8631: https://github.com/galaxyproject/galaxy/commit/7ac8631
|
||||
.. _2bf52fe: https://github.com/galaxyproject/galaxy/commit/2bf52fe
|
||||
.. _e4e5df0: https://github.com/galaxyproject/galaxy/commit/e4e5df0
|
||||
.. _6e17bf4: https://github.com/galaxyproject/galaxy/commit/6e17bf4
|
||||
.. _0c94f04: https://github.com/galaxyproject/galaxy/commit/0c94f04
|
||||
.. _Pull Request 1: https://github.com/galaxyproject/galaxy/pull/1
|
||||
.. _ec549db: https://github.com/galaxyproject/galaxy/commit/ec549db
|
||||
.. _226e826: https://github.com/galaxyproject/galaxy/commit/226e826
|
||||
.. _79d50d8: https://github.com/galaxyproject/galaxy/commit/79d50d8
|
||||
.. _964e081: https://github.com/galaxyproject/galaxy/commit/964e081
|
||||
.. _Pull Request 5: https://github.com/galaxyproject/galaxy/pull/5
|
||||
.. _1f1bb29: https://github.com/galaxyproject/galaxy/commit/1f1bb29
|
||||
.. _Pull Request 4: https://github.com/galaxyproject/galaxy/pull/4
|
||||
.. _dde2fc9: https://github.com/galaxyproject/galaxy/commit/dde2fc9
|
||||
.. _c2eb74c: https://github.com/galaxyproject/galaxy/commit/c2eb74c
|
||||
.. _71a64ca: https://github.com/galaxyproject/galaxy/commit/71a64ca
|
||||
.. _3af3bf5: https://github.com/galaxyproject/galaxy/commit/3af3bf5
|
||||
.. _e99adb5: https://github.com/galaxyproject/galaxy/commit/e99adb5
|
||||
@@ -0,0 +1,58 @@
|
||||
===========================================================
|
||||
May 2015 Galaxy Release (v 15.05)
|
||||
===========================================================
|
||||
|
||||
.. include:: _header.rst
|
||||
|
||||
Highlights
|
||||
===========================================================
|
||||
|
||||
**Authentication Plugins**
|
||||
Galaxy now has native support for LDAP and Active Directory via a new
|
||||
community developed authentication plugin system.
|
||||
|
||||
**Tool Sections**
|
||||
Tool parameters may now be groupped into collapsable sections.
|
||||
|
||||
**Collection Creators**
|
||||
New widgets have been added that allow much more flexibility when creating
|
||||
simple dataset pair and list collections.
|
||||
|
||||
`Github <https://github.com/galaxyproject/galaxy>`__
|
||||
===========================================================
|
||||
|
||||
New
|
||||
.. code-block:: shell
|
||||
|
||||
% git clone -b master https://github.com/galaxyproject/galaxy.git
|
||||
|
||||
Update to latest stable release
|
||||
.. code-block:: shell
|
||||
|
||||
% git checkout master && pull --ff-only origin master
|
||||
|
||||
Update to exact version
|
||||
.. code-block:: shell
|
||||
|
||||
% git checkout v15.05
|
||||
|
||||
|
||||
`BitBucket <https://bitbucket.org/galaxy/galaxy-dist>`__
|
||||
===========================================================
|
||||
|
||||
Upgrade
|
||||
.. code-block:: shell
|
||||
|
||||
% hg pull
|
||||
% hg update latest_15.05
|
||||
|
||||
|
||||
See `our wiki <https://wiki.galaxyproject.org/Develop/SourceCode>`__ for additional details regarding the source code locations.
|
||||
|
||||
Release Notes
|
||||
===========================================================
|
||||
|
||||
.. include:: 15.05.rst
|
||||
:start-after: enhancements
|
||||
|
||||
.. include:: _thanks.rst
|
||||
@@ -0,0 +1,3 @@
|
||||
.. image:: https://wiki.galaxyproject.org/Images/GalaxyLogo?action=AttachFile&do=get&target=galaxy_logo_25percent_transparent.png
|
||||
:alt: Get the Galaxy Release Your Way
|
||||
:target: http://getgalaxy.org
|
||||
@@ -0,0 +1,7 @@
|
||||
To stay up to date with Galaxy's progress watch our `screencasts <https://vimeo.com/galaxyproject>`__,
|
||||
read our `wiki <https://wiki.galaxyproject.org/>`__, and follow
|
||||
`@galaxyproject <https://twitter.com/galaxyproject>`__ on Twitter.
|
||||
|
||||
*Thanks for using Galaxy!*
|
||||
|
||||
`The Galaxy Team <https://wiki.galaxyproject.org/GalaxyTeam>`__
|
||||
@@ -0,0 +1,21 @@
|
||||
Releases
|
||||
========
|
||||
|
||||
.. toctree::
|
||||
:maxdepth: 1
|
||||
|
||||
15.05_announce
|
||||
15.03_announce
|
||||
15.01_announce
|
||||
14.10_announce
|
||||
14.08_announce
|
||||
14.06_announce
|
||||
14.04_announce
|
||||
14.02_announce
|
||||
13.11_announce
|
||||
13.08_announce
|
||||
13.06_announce
|
||||
13.04_announce
|
||||
13.02_announce
|
||||
13.01_announce
|
||||
older_releases
|
||||
@@ -0,0 +1,11 @@
|
||||
===========================================================
|
||||
Galaxy Releases older than v 13.01
|
||||
===========================================================
|
||||
|
||||
.. include:: _header.rst
|
||||
|
||||
Please see the `Galaxy wiki`_ for announcement and release notes.
|
||||
|
||||
.. _Galaxy wiki: https://wiki.galaxyproject.org/DevNewsBriefs
|
||||
|
||||
.. include:: _thanks.rst
|
||||
@@ -12,6 +12,7 @@ import struct
|
||||
import subprocess
|
||||
import tempfile
|
||||
import re
|
||||
import warnings
|
||||
import zipfile
|
||||
|
||||
from galaxy import eggs
|
||||
@@ -24,8 +25,11 @@ from galaxy.datatypes.metadata import MetadataElement, MetadataParameter, ListPa
|
||||
from galaxy.datatypes import metadata
|
||||
import dataproviders
|
||||
|
||||
eggs.require( "pysam" )
|
||||
from pysam import csamtools
|
||||
with warnings.catch_warnings():
|
||||
warnings.simplefilter( "ignore" )
|
||||
eggs.require( "pysam" )
|
||||
from pysam import csamtools
|
||||
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
@@ -8,6 +8,9 @@ import logging
|
||||
import socket
|
||||
from galaxy.util import send_mail
|
||||
from galaxy.util.json import dumps
|
||||
from galaxy import eggs
|
||||
eggs.require( "MarkupSafe" )
|
||||
from markupsafe import escape
|
||||
|
||||
log = logging.getLogger( __name__ )
|
||||
|
||||
@@ -50,7 +53,7 @@ class DefaultJobAction(object):
|
||||
@classmethod
|
||||
def get_short_str(cls, pja):
|
||||
if pja.action_arguments:
|
||||
return "%s -> %s" % (pja.action_type, pja.action_arguments)
|
||||
return "%s -> %s" % (pja.action_type, escape(pja.action_arguments))
|
||||
else:
|
||||
return "%s" % pja.action_type
|
||||
|
||||
@@ -91,7 +94,7 @@ class EmailAction(DefaultJobAction):
|
||||
@classmethod
|
||||
def get_short_str(cls, pja):
|
||||
if pja.action_arguments and 'host' in pja.action_arguments:
|
||||
return "Email the current user from server %s when this job is complete." % pja.action_arguments['host']
|
||||
return "Email the current user from server %s when this job is complete." % escape(pja.action_arguments['host'])
|
||||
else:
|
||||
return "Email the current user when this job is complete."
|
||||
|
||||
@@ -127,7 +130,8 @@ class ChangeDatatypeAction(DefaultJobAction):
|
||||
|
||||
@classmethod
|
||||
def get_short_str(cls, pja):
|
||||
return "Set the datatype of output '%s' to '%s'" % (pja.output_name, pja.action_arguments['newtype'])
|
||||
return "Set the datatype of output '%s' to '%s'" % (escape(pja.output_name),
|
||||
escape(pja.action_arguments['newtype']))
|
||||
|
||||
|
||||
class RenameDatasetAction(DefaultJobAction):
|
||||
@@ -235,7 +239,8 @@ class RenameDatasetAction(DefaultJobAction):
|
||||
def get_short_str(cls, pja):
|
||||
# Prevent renaming a dataset to the empty string.
|
||||
if pja.action_arguments and pja.action_arguments.get('newname', ''):
|
||||
return "Rename output '%s' to '%s'." % (pja.output_name, pja.action_arguments['newname'])
|
||||
return "Rename output '%s' to '%s'." % (escape(pja.output_name),
|
||||
escape(pja.action_arguments['newname']))
|
||||
else:
|
||||
return "Rename action used without a new name specified. Output name will be unchanged."
|
||||
|
||||
@@ -260,7 +265,7 @@ class HideDatasetAction(DefaultJobAction):
|
||||
|
||||
@classmethod
|
||||
def get_short_str(cls, pja):
|
||||
return "Hide output '%s'." % pja.output_name
|
||||
return "Hide output '%s'." % escape(pja.output_name)
|
||||
|
||||
|
||||
class DeleteDatasetAction(DefaultJobAction):
|
||||
@@ -336,7 +341,7 @@ class ColumnSetAction(DefaultJobAction):
|
||||
|
||||
@classmethod
|
||||
def get_short_str(cls, pja):
|
||||
return "Set the following metadata values:<br/>" + "<br/>".join(['%s : %s' % (k, v) for k, v in pja.action_arguments.iteritems()])
|
||||
return "Set the following metadata values:<br/>" + "<br/>".join(['%s : %s' % (escape(k), escape(v)) for k, v in pja.action_arguments.iteritems()])
|
||||
|
||||
|
||||
class SetMetadataAction(DefaultJobAction):
|
||||
@@ -455,7 +460,8 @@ class TagDatasetAction(DefaultJobAction):
|
||||
@classmethod
|
||||
def get_short_str(cls, pja):
|
||||
if pja.action_arguments and pja.action_arguments.get('tags', ''):
|
||||
return "Add tag(s) '%s' to '%s'." % (pja.action_arguments['tags'], pja.output_name)
|
||||
return "Add tag(s) '%s' to '%s'." % (escape(pja.action_arguments['tags']),
|
||||
escape(pja.output_name))
|
||||
else:
|
||||
return "Tag addition action used without a tag specified. No tag will be added."
|
||||
|
||||
|
||||
@@ -282,21 +282,21 @@ class HistorySerializer( sharable.SharableModelSerializer, deletable.PurgableSer
|
||||
state = states.ERROR
|
||||
# TODO: history_state and state_counts are classically calc'd at the same time
|
||||
# so this is rel. ineff. - if we keep this...
|
||||
hda_state_counts = self.serialize_state_counts( history, 'counts', exclude_deleted=False, **context )
|
||||
hda_state_counts = self.serialize_state_counts( history, 'counts', exclude_deleted=True, **context )
|
||||
num_hdas = sum( hda_state_counts.values() )
|
||||
if num_hdas == 0:
|
||||
state = states.NEW
|
||||
|
||||
else:
|
||||
if ( hda_state_counts[ states.RUNNING ] > 0
|
||||
or hda_state_counts[ states.SETTING_METADATA ] > 0
|
||||
or hda_state_counts[ states.UPLOAD ] > 0 ):
|
||||
or hda_state_counts[ states.SETTING_METADATA ] > 0
|
||||
or hda_state_counts[ states.UPLOAD ] > 0 ):
|
||||
state = states.RUNNING
|
||||
# TODO: this method may be more useful if we *also* polled the histories jobs here too
|
||||
elif hda_state_counts[ states.QUEUED ] > 0:
|
||||
state = states.QUEUED
|
||||
elif ( hda_state_counts[ states.ERROR ] > 0
|
||||
or hda_state_counts[ states.FAILED_METADATA ] > 0 ):
|
||||
or hda_state_counts[ states.FAILED_METADATA ] > 0 ):
|
||||
state = states.ERROR
|
||||
elif hda_state_counts[ states.OK ] == num_hdas:
|
||||
state = states.OK
|
||||
|
||||
@@ -1880,10 +1880,12 @@ class Tool( object, Dictifiable ):
|
||||
"""
|
||||
args = dict()
|
||||
for key, param in self.inputs.iteritems():
|
||||
if isinstance( param, HiddenToolParameter ):
|
||||
# BaseURLToolParameter is now a subclass of HiddenToolParameter, so
|
||||
# we must check if param is a BaseURLToolParameter first
|
||||
if isinstance( param, BaseURLToolParameter ):
|
||||
args[key] = param.get_initial_value( trans, None )
|
||||
elif isinstance( param, HiddenToolParameter ):
|
||||
args[key] = model.User.expand_user_properties( trans.user, param.value )
|
||||
elif isinstance( param, BaseURLToolParameter ):
|
||||
args[key] = param.get_value( trans )
|
||||
else:
|
||||
raise Exception( "Unexpected parameter type" )
|
||||
return args
|
||||
@@ -2546,7 +2548,8 @@ class Tool( object, Dictifiable ):
|
||||
tool_versions = []
|
||||
tools = self.app.toolbox.get_loaded_tools_by_lineage(self.id)
|
||||
for t in tools:
|
||||
tool_versions.append(t.version)
|
||||
if not t.version in tool_versions:
|
||||
tool_versions.append(t.version)
|
||||
|
||||
# add information with underlying requirements and their versions
|
||||
tool_requirements = []
|
||||
|
||||
@@ -185,6 +185,7 @@ class ToolDataTable( object ):
|
||||
self.comment_char = config_element.get( 'comment_char' )
|
||||
self.empty_field_value = config_element.get( 'empty_field_value', '' )
|
||||
self.empty_field_values = {}
|
||||
self.allow_duplicate_entries = util.asbool( config_element.get( 'allow_duplicate_entries', True ) )
|
||||
self.here = filename and os.path.dirname(filename)
|
||||
self.filenames = odict()
|
||||
self.tool_data_path = tool_data_path
|
||||
@@ -354,6 +355,11 @@ class TabularToolDataTable( ToolDataTable, Dictifiable ):
|
||||
self.filenames[ filename ] = info
|
||||
#save info about table
|
||||
self._merged_load_info.append( ( other_table.__class__, other_table._load_info ) )
|
||||
# If we are merging in a data table that does not allow duplicates, enforce that upon the data table
|
||||
if self.allow_duplicate_entries and not other_table.allow_duplicate_entries:
|
||||
log.debug( 'While attempting to merge tool data table "%s", the other instance of the table specified that duplicate entries are not allowed, now deduplicating all previous entries.', self.name )
|
||||
self.allow_duplicate_entries = False
|
||||
self._deduplicate_data()
|
||||
#add data entries and return current data table version
|
||||
return self.add_entries( other_table.data, allow_duplicates=allow_duplicates, persist=persist, persist_on_error=persist_on_error, entry_source=entry_source, **kwd )
|
||||
|
||||
@@ -426,6 +432,8 @@ class TabularToolDataTable( ToolDataTable, Dictifiable ):
|
||||
def extend_data_with( self, filename, errors=None ):
|
||||
here = os.path.dirname(os.path.abspath(filename))
|
||||
self.data.extend( self.parse_file_fields( open( filename ), errors=errors, here=here ) )
|
||||
if not self.allow_duplicate_entries:
|
||||
self._deduplicate_data()
|
||||
|
||||
def parse_file_fields( self, reader, errors=None, here="__HERE__" ):
|
||||
"""
|
||||
@@ -536,7 +544,7 @@ class TabularToolDataTable( ToolDataTable, Dictifiable ):
|
||||
is_error = False
|
||||
if self.largest_index < len( fields ):
|
||||
fields = self._replace_field_separators( fields )
|
||||
if fields not in self.get_fields() or allow_duplicates:
|
||||
if fields not in self.get_fields() or ( allow_duplicates and self.allow_duplicate_entries ):
|
||||
self.data.append( fields )
|
||||
else:
|
||||
log.debug( "Attempted to add fields (%s) to data table '%s', but this entry already exists and allow_duplicates is False.", fields, self.name )
|
||||
@@ -624,6 +632,20 @@ class TabularToolDataTable( ToolDataTable, Dictifiable ):
|
||||
replace = " "
|
||||
return map( lambda x: x.replace( separator, replace ), fields )
|
||||
|
||||
def _deduplicate_data( self ):
|
||||
# Remove duplicate entries, without recreating self.data object
|
||||
dup_lines = []
|
||||
hash_list = []
|
||||
for i, fields in enumerate( self.data ):
|
||||
fields_hash = hash( self.separator.join( fields ) )
|
||||
if fields_hash in hash_list:
|
||||
dup_lines.append( i )
|
||||
log.debug( 'Found duplicate entry in tool data table "%s", but duplicates are not allowed, removing additional entry for: "%s"', self.name, fields )
|
||||
else:
|
||||
hash_list.append( fields_hash )
|
||||
for i in reversed( dup_lines ):
|
||||
self.data.pop( i )
|
||||
|
||||
@property
|
||||
def xml_string( self ):
|
||||
return util.xml_to_string( self.config_element )
|
||||
|
||||
@@ -677,6 +677,7 @@ class HiddenToolParameter( ToolParameter ):
|
||||
def get_label( self ):
|
||||
return None
|
||||
|
||||
|
||||
class ColorToolParameter( ToolParameter ):
|
||||
"""
|
||||
Parameter that stores a color.
|
||||
@@ -707,9 +708,23 @@ class BaseURLToolParameter( HiddenToolParameter ):
|
||||
super( BaseURLToolParameter, self ).__init__( tool, input_source )
|
||||
self.value = input_source.get( 'value', '' )
|
||||
|
||||
def get_initial_value( self, trans, context, history=None ):
|
||||
return self._get_value()
|
||||
|
||||
def get_html_field( self, trans=None, value=None, other_values={} ):
|
||||
return form_builder.HiddenField( self.name, self._get_value() )
|
||||
|
||||
def from_html( self, value=None, trans=None, context={} ):
|
||||
return self._get_value()
|
||||
|
||||
def _get_value( self ):
|
||||
return url_for( self.value, qualified=True )
|
||||
|
||||
def to_dict( self, trans, view='collection', value_mapper=None, other_values={} ):
|
||||
d = super( BaseURLToolParameter, self ).to_dict( trans )
|
||||
d[ 'value' ] = self._get_value()
|
||||
return d
|
||||
|
||||
|
||||
DEFAULT_VALUE_MAP = lambda x: x
|
||||
|
||||
|
||||
@@ -0,0 +1,90 @@
|
||||
#!/usr/bin/env python
|
||||
# Little script to make HISTORY.rst more easy to format properly, lots TODO
|
||||
# pull message down and embed, use arg parse, handle multiple, etc...
|
||||
import os
|
||||
import sys
|
||||
try:
|
||||
import requests
|
||||
except ImportError:
|
||||
requests = None
|
||||
import urlparse
|
||||
import textwrap
|
||||
|
||||
|
||||
PROJECT_DIRECTORY = os.path.join(os.path.dirname(__file__), "..")
|
||||
PROJECT_OWNER = "galaxyproject"
|
||||
PROJECT_NAME = "galaxy"
|
||||
PROJECT_URL = "https://github.com/%s/%s" % (PROJECT_OWNER, PROJECT_NAME)
|
||||
PROJECT_API = "https://api.github.com/repos/%s/%s/" % (PROJECT_OWNER, PROJECT_NAME)
|
||||
|
||||
|
||||
def main(argv):
|
||||
releases_path = os.path.join(PROJECT_DIRECTORY, "doc", "source", "releases")
|
||||
newest_release = sorted(os.listdir(releases_path))[-1]
|
||||
history_path = os.path.join(releases_path, newest_release)
|
||||
history = open(history_path, "r").read().decode("utf-8")
|
||||
|
||||
def extend(from_str, line):
|
||||
from_str += "\n"
|
||||
return history.replace(from_str, from_str + line + "\n" )
|
||||
|
||||
ident = argv[1]
|
||||
|
||||
message = ""
|
||||
if len(argv) > 2:
|
||||
message = argv[2]
|
||||
elif not (ident.startswith("pr") or ident.startswith("issue")):
|
||||
api_url = urlparse.urljoin(PROJECT_API, "commits/%s" % ident)
|
||||
req = requests.get(api_url).json()
|
||||
commit = req["commit"]
|
||||
message = commit["message"]
|
||||
message = get_first_sentence(message)
|
||||
elif requests is not None and ident.startswith("pr"):
|
||||
pull_request = ident[len("pr"):]
|
||||
api_url = urlparse.urljoin(PROJECT_API, "pulls/%s" % pull_request)
|
||||
req = requests.get(api_url).json()
|
||||
message = req["title"]
|
||||
elif requests is not None and ident.startswith("issue"):
|
||||
issue = ident[len("issue"):]
|
||||
api_url = urlparse.urljoin(PROJECT_API, "issues/%s" % pull_request)
|
||||
req = requests.get(api_url).json()
|
||||
message = req["title"]
|
||||
else:
|
||||
message = ""
|
||||
|
||||
to_doc = message + " "
|
||||
|
||||
if ident.startswith("pr"):
|
||||
pull_request = ident[len("pr"):]
|
||||
text = ".. _Pull Request {0}: {1}/pull/{0}".format(pull_request, PROJECT_URL)
|
||||
history = extend(".. github_links", text)
|
||||
to_doc += "`Pull Request {0}`_".format(pull_request)
|
||||
elif ident.startswith("issue"):
|
||||
issue = ident[len("issue"):]
|
||||
text = ".. _Issue {0}: {1}/issues/{0}".format(issue, PROJECT_URL)
|
||||
history = extend(".. github_links", text)
|
||||
to_doc += "`Issue {0}`_".format(issue)
|
||||
else:
|
||||
short_rev = ident[:7]
|
||||
text = ".. _{0}: {1}/commit/{0}".format(short_rev, PROJECT_URL)
|
||||
history = extend(".. github_links", text)
|
||||
to_doc += "{0}_".format(short_rev)
|
||||
|
||||
to_doc = wrap(to_doc)
|
||||
history = extend(".. to_doc", to_doc)
|
||||
open(history_path, "w").write(history.encode("utf-8"))
|
||||
|
||||
|
||||
def get_first_sentence(message):
|
||||
first_line = message.split("\n")[0]
|
||||
return first_line
|
||||
|
||||
|
||||
def wrap(message):
|
||||
wrapper = textwrap.TextWrapper(initial_indent="* ")
|
||||
wrapper.subsequent_indent = ' '
|
||||
wrapper.width = 78
|
||||
return "\n".join(wrapper.wrap(message))
|
||||
|
||||
if __name__ == "__main__":
|
||||
main(sys.argv)
|
||||
@@ -1 +1 @@
|
||||
{"version":3,"file":"utils.js","sources":["../../src/utils/utils.js"],"names":["define","_","deepeach","dict","callback","i","d","sanitize","content","$","text","html","validate","value","Array","length","undefined","indexOf","textify","lst","toString","replace","pos","lastIndexOf","substr","get","options","top","__utils__get__","cache","url","success","console","debug","request","data","response","error","ajaxConfig","contentType","type","param","dataType","JSON","stringify","ajax","done","jQuery","parseJSON","e","fail","response_text","responseText","cssGetAttribute","classname","name","el","appendTo","css","remove","cssLoadFile","galaxy_config","root","merge","optionsDefault","defaults","bytesToString","size","normal_font","unit","rounded","Math","round","uid","__utils__uid__","time","Date","hours","getHours","minutes","getMinutes","datetime","getDate","getMonth","getFullYear"],"mappings":"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"}
|
||||
{"version":3,"file":"utils.js","sources":["../../src/utils/utils.js"],"names":["define","_","deepeach","dict","callback","i","d","sanitize","content","$","text","html","validate","value","Array","length","undefined","indexOf","textify","lst","toString","replace","pos","lastIndexOf","substr","get","options","top","__utils__get__","cache","url","success","console","debug","request","data","response","error","ajaxConfig","contentType","type","param","dataType","JSON","stringify","ajax","done","jQuery","parseJSON","e","fail","response_text","responseText","cssGetAttribute","classname","name","el","appendTo","css","remove","cssLoadFile","galaxy_config","root","merge","optionsDefault","defaults","bytesToString","size","normal_font","unit","rounded","Math","round","uid","__utils__uid__","time","Date","hours","getHours","minutes","getMinutes","datetime","getDate","getMonth","getFullYear"],"mappings":"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"}
|
||||
@@ -1,2 +1,2 @@
|
||||
define(["libs/underscore"],function(a){function b(a,c){for(var d in a){var e=a[d];e&&"object"==typeof e&&(c(e),b(e,c))}}function c(a){return $("<div/>").text(a).html()}function d(a){if(a instanceof Array||(a=[a]),0===a.length)return!1;for(var b in a)if(["__null__","__undefined__","None",null,void 0].indexOf(a[b])>-1)return!1;return!0}function e(a){var a=a.toString();if(a){a=a.replace(/,/g,", ");var b=a.lastIndexOf(", ");return-1!=b&&(a=a.substr(0,b)+" or "+a.substr(b+1)),a}return""}function f(a){top.__utils__get__=top.__utils__get__||{},a.cache&&top.__utils__get__[a.url]?(a.success&&a.success(top.__utils__get__[a.url]),console.debug("utils.js::get() - Fetching from cache ["+a.url+"].")):g({url:a.url,data:a.data,success:function(b){top.__utils__get__[a.url]=b,a.success&&a.success(b)},error:function(b){a.error&&a.error(b)}})}function g(a){var b={contentType:"application/json",type:a.type||"GET",data:a.data||{},url:a.url};"GET"==b.type||"DELETE"==b.type?(b.url+=-1==b.url.indexOf("?")?"?":"&",b.url=b.url+$.param(b.data,!0),b.data=null):(b.dataType="json",b.url=b.url,b.data=JSON.stringify(b.data)),$.ajax(b).done(function(b){if("string"==typeof b)try{b=b.replace("Infinity,",'"Infinity",'),b=jQuery.parseJSON(b)}catch(c){console.debug(c)}a.success&&a.success(b)}).fail(function(b){var c=null;try{c=jQuery.parseJSON(b.responseText)}catch(d){c=b.responseText}a.error&&a.error(c,b)})}function h(a,b){var c=$('<div class="'+a+'"></div>');c.appendTo(":eq(0)");var d=c.css(b);return c.remove(),d}function i(a){$('link[href^="'+a+'"]').length||$('<link href="'+galaxy_config.root+a+'" rel="stylesheet">').appendTo("head")}function j(b,c){return b?a.defaults(b,c):c}function k(a,b){var c="";if(a>=1e11)a/=1e11,c="TB";else if(a>=1e8)a/=1e8,c="GB";else if(a>=1e5)a/=1e5,c="MB";else if(a>=100)a/=100,c="KB";else{if(!(a>0))return"<strong>-</strong>";a=10*a,c="b"}var d=Math.round(a)/10;return b?d+" "+c:"<strong>"+d+"</strong> "+c}function l(){return top.__utils__uid__=top.__utils__uid__||0,"uid-"+top.__utils__uid__++}function m(){var a=new Date,b=(a.getHours()<10?"0":"")+a.getHours(),c=(a.getMinutes()<10?"0":"")+a.getMinutes(),d=a.getDate()+"/"+(a.getMonth()+1)+"/"+a.getFullYear()+", "+b+":"+c;return d}return{cssLoadFile:i,cssGetAttribute:h,get:f,merge:j,bytesToString:k,uid:l,time:m,request:g,sanitize:c,textify:e,validate:d,deepeach:b}});
|
||||
define(["libs/underscore"],function(a){function b(a,c){for(var d in a){var e=a[d];e&&"object"==typeof e&&(c(e),b(e,c))}}function c(a){return $("<div/>").text(a).html()}function d(a){if(a instanceof Array||(a=[a]),0===a.length)return!1;for(var b in a)if(["__null__","__undefined__",null,void 0].indexOf(a[b])>-1)return!1;return!0}function e(a){var a=a.toString();if(a){a=a.replace(/,/g,", ");var b=a.lastIndexOf(", ");return-1!=b&&(a=a.substr(0,b)+" or "+a.substr(b+1)),a}return""}function f(a){top.__utils__get__=top.__utils__get__||{},a.cache&&top.__utils__get__[a.url]?(a.success&&a.success(top.__utils__get__[a.url]),console.debug("utils.js::get() - Fetching from cache ["+a.url+"].")):g({url:a.url,data:a.data,success:function(b){top.__utils__get__[a.url]=b,a.success&&a.success(b)},error:function(b){a.error&&a.error(b)}})}function g(a){var b={contentType:"application/json",type:a.type||"GET",data:a.data||{},url:a.url};"GET"==b.type||"DELETE"==b.type?(b.url+=-1==b.url.indexOf("?")?"?":"&",b.url=b.url+$.param(b.data,!0),b.data=null):(b.dataType="json",b.url=b.url,b.data=JSON.stringify(b.data)),$.ajax(b).done(function(b){if("string"==typeof b)try{b=b.replace("Infinity,",'"Infinity",'),b=jQuery.parseJSON(b)}catch(c){console.debug(c)}a.success&&a.success(b)}).fail(function(b){var c=null;try{c=jQuery.parseJSON(b.responseText)}catch(d){c=b.responseText}a.error&&a.error(c,b)})}function h(a,b){var c=$('<div class="'+a+'"></div>');c.appendTo(":eq(0)");var d=c.css(b);return c.remove(),d}function i(a){$('link[href^="'+a+'"]').length||$('<link href="'+galaxy_config.root+a+'" rel="stylesheet">').appendTo("head")}function j(b,c){return b?a.defaults(b,c):c}function k(a,b){var c="";if(a>=1e11)a/=1e11,c="TB";else if(a>=1e8)a/=1e8,c="GB";else if(a>=1e5)a/=1e5,c="MB";else if(a>=100)a/=100,c="KB";else{if(!(a>0))return"<strong>-</strong>";a=10*a,c="b"}var d=Math.round(a)/10;return b?d+" "+c:"<strong>"+d+"</strong> "+c}function l(){return top.__utils__uid__=top.__utils__uid__||0,"uid-"+top.__utils__uid__++}function m(){var a=new Date,b=(a.getHours()<10?"0":"")+a.getHours(),c=(a.getMinutes()<10?"0":"")+a.getMinutes(),d=a.getDate()+"/"+(a.getMonth()+1)+"/"+a.getFullYear()+", "+b+":"+c;return d}return{cssLoadFile:i,cssGetAttribute:h,get:f,merge:j,bytesToString:k,uid:l,time:m,request:g,sanitize:c,textify:e,validate:d,deepeach:b}});
|
||||
//# sourceMappingURL=../../maps/utils/utils.js.map
|
||||
@@ -583,9 +583,10 @@ if wf_parms:
|
||||
<%
|
||||
pja_ss_all = []
|
||||
for pja_ss in [ActionBox.get_short_str(pja) for pja in step.post_job_actions]:
|
||||
pja_ss = h.escape( pja_ss )
|
||||
for rematch in re.findall('\$\{.+?\}', pja_ss):
|
||||
pja_ss = pja_ss.replace(rematch, '<span style="background-color:%s" class="wfpspan wf_parm__%s pja_wfp">%s</span>' % (wf_parms[rematch[2:-1]], rematch[2:-1], rematch[2:-1]))
|
||||
pja_ss = pja_ss.replace(rematch, '<span style="background-color:%s" class="wfpspan wf_parm__%s pja_wfp">%s</span>' % (wf_parms[rematch[2:-1]],
|
||||
rematch[2:-1],
|
||||
rematch[2:-1]))
|
||||
pja_ss_all.append(pja_ss)
|
||||
%>
|
||||
${'<br/>'.join(pja_ss_all)}
|
||||
|
||||
@@ -1516,7 +1516,7 @@ class TwillTestCase( unittest.TestCase ):
|
||||
# HACK: don't use panels because late_javascripts() messes up the twill browser and it
|
||||
# can't find form fields (and hence user can't be logged in).
|
||||
self.visit_url( "/user/login?use_panels=False" )
|
||||
self.submit_form( 'login', 'login_button', email=email, redirect=redirect, password=password )
|
||||
self.submit_form( 'login', 'login_button', login=email, redirect=redirect, password=password )
|
||||
|
||||
def logout( self ):
|
||||
self.visit_url( "%s/user/logout" % self.url )
|
||||
|
||||
@@ -539,6 +539,12 @@ class ShedTwillTestCase( TwillTestCase ):
|
||||
string = string.replace( character, replacement )
|
||||
return string
|
||||
|
||||
def expect_repo_created_strings( self, name ):
|
||||
return [
|
||||
'Repository <b>%s</b>' % name,
|
||||
'Repository <b>%s</b> has been created' % name,
|
||||
]
|
||||
|
||||
def export_capsule( self, repository ):
|
||||
url = '/repository/export?repository_id=%s&changeset_revision=%s' % \
|
||||
( self.security.encode_id( repository.id ), self.get_repository_tip( repository ) )
|
||||
@@ -573,7 +579,7 @@ class ShedTwillTestCase( TwillTestCase ):
|
||||
self.create_user_in_galaxy( email=email, password=password, username=username, redirect=redirect )
|
||||
if previously_created:
|
||||
self.visit_galaxy_url( "/user/login?use_panels=False" )
|
||||
self.submit_form( '1', 'login_button', email=email, redirect=redirect, password=password )
|
||||
self.submit_form( '1', 'login_button', login=email, redirect=redirect, password=password )
|
||||
|
||||
def galaxy_logout( self ):
|
||||
self.visit_galaxy_url( "/user/logout" )
|
||||
|
||||
@@ -42,8 +42,7 @@ class TestBasicRepositoryFeatures( ShedTwillTestCase ):
|
||||
self.logout()
|
||||
self.login( email=common.test_user_1_email, username=common.test_user_1_name )
|
||||
category = self.test_db_util.get_category_by_name( 'Test 0000 Basic Repository Features 1' )
|
||||
strings_displayed = [ 'Repository %s' % "'%s'" % repository_name,
|
||||
'Repository %s has been created' % "<b>%s</b>" % repository_name ]
|
||||
strings_displayed = self.expect_repo_created_strings(repository_name)
|
||||
self.get_or_create_repository( name=repository_name,
|
||||
description=repository_description,
|
||||
long_description=repository_long_description,
|
||||
|
||||
@@ -54,8 +54,7 @@ class TestRepositoryMultipleOwners( ShedTwillTestCase ):
|
||||
category = self.create_category( name='Test 0120', description='Description of test 0120' )
|
||||
self.logout()
|
||||
self.login( email=common.test_user_2_email, username=common.test_user_2_name )
|
||||
strings_displayed = [ 'Repository %s' % "'%s'" % datatypes_repository_name,
|
||||
'Repository %s has been created' % "<b>%s</b>" % datatypes_repository_name ]
|
||||
strings_displayed = self.expect_repo_created_strings(datatypes_repository_name)
|
||||
repository = self.get_or_create_repository( name=datatypes_repository_name,
|
||||
description=datatypes_repository_description,
|
||||
long_description=datatypes_repository_long_description,
|
||||
@@ -94,8 +93,7 @@ class TestRepositoryMultipleOwners( ShedTwillTestCase ):
|
||||
category = self.create_category( name='Test 0120', description='Description of test 0120' )
|
||||
self.logout()
|
||||
self.login( email=common.test_user_1_email, username=common.test_user_1_name )
|
||||
strings_displayed = [ 'Repository %s' % "'%s'" % tool_repository_name,
|
||||
'Repository %s has been created' % "<b>%s</b>" % tool_repository_name ]
|
||||
strings_displayed = self.expect_repo_created_strings(tool_repository_name)
|
||||
repository = self.get_or_create_repository( name=tool_repository_name,
|
||||
description=tool_repository_description,
|
||||
long_description=tool_repository_long_description,
|
||||
|
||||
@@ -91,8 +91,7 @@ class TestRepositoryComponentReviews( ShedTwillTestCase ):
|
||||
category = self.create_category( name='Test 0400 Repository Component Reviews', description='Test 0400 Repository Component Reviews' )
|
||||
self.logout()
|
||||
self.login( email=common.test_user_1_email, username=common.test_user_1_name )
|
||||
strings_displayed = [ 'Repository %s' % "'%s'" % repository_name,
|
||||
'Repository %s has been created' % "<b>%s</b>" % repository_name ]
|
||||
strings_displayed = self.expect_repo_created_strings(repository_name)
|
||||
repository = self.get_or_create_repository( name=repository_name,
|
||||
description=repository_description,
|
||||
long_description=repository_long_description,
|
||||
|
||||
@@ -70,8 +70,7 @@ class TestRepositoryComponentReviews( ShedTwillTestCase ):
|
||||
category = self.create_category( name='Test 0400 Repository Component Reviews', description='Test 0400 Repository Component Reviews' )
|
||||
self.logout()
|
||||
self.login( email=common.test_user_1_email, username=common.test_user_1_name )
|
||||
strings_displayed = [ 'Repository %s' % "'%s'" % repository_name,
|
||||
'Repository %s has been created' % "<b>%s</b>" % repository_name ]
|
||||
strings_displayed = self.expect_repo_created_strings(repository_name)
|
||||
repository = self.get_or_create_repository( name=repository_name,
|
||||
description=repository_description,
|
||||
long_description=repository_long_description,
|
||||
|
||||
@@ -53,8 +53,7 @@ class TestRepositoryCitableURLs( ShedTwillTestCase ):
|
||||
description='Test 0400 Repository Citable URLs category' )
|
||||
self.logout()
|
||||
self.login( email=common.test_user_1_email, username=common.test_user_1_name )
|
||||
strings_displayed = [ 'Repository %s' % "'%s'" % repository_name,
|
||||
'Repository %s has been created' % "<b>%s</b>" % repository_name ]
|
||||
strings_displayed = self.expect_repo_created_strings(repository_name)
|
||||
repository = self.get_or_create_repository( name=repository_name,
|
||||
description=repository_description,
|
||||
long_description=repository_long_description,
|
||||
@@ -128,7 +127,7 @@ class TestRepositoryCitableURLs( ShedTwillTestCase ):
|
||||
strings_displayed = [ '/repository', 'view_repository', 'id=', encoded_repository_id ]
|
||||
strings_displayed_in_iframe = [ 'user1', 'filtering_0420', 'Galaxy filtering tool for test 0420' ]
|
||||
strings_displayed_in_iframe.append( self.get_repository_tip( repository ) )
|
||||
strings_displayed_in_iframe.append( 'Sharable link to this repository:' )
|
||||
strings_displayed_in_iframe.append( 'Link to this repository:' )
|
||||
strings_displayed_in_iframe.append( '%s/view/user1/filtering_0420' % self.url )
|
||||
self.load_citable_url( username='user1',
|
||||
repository_name='filtering_0420',
|
||||
@@ -154,7 +153,7 @@ class TestRepositoryCitableURLs( ShedTwillTestCase ):
|
||||
# The iframe should point to /repository/view_repository?id=<encoded repository ID>
|
||||
strings_displayed = [ '/repository', 'view_repository', 'id=' + encoded_repository_id ]
|
||||
strings_displayed_in_iframe = [ 'user1', 'filtering_0420', 'Galaxy filtering tool for test 0420', first_changeset_hash ]
|
||||
strings_displayed_in_iframe.append( 'Sharable link to this repository revision:' )
|
||||
strings_displayed_in_iframe.append( 'Link to this repository revision:' )
|
||||
strings_displayed_in_iframe.append( '%s/view/user1/filtering_0420/%s' % ( self.url, first_changeset_hash ) )
|
||||
strings_not_displayed_in_iframe = []
|
||||
self.load_citable_url( username='user1',
|
||||
@@ -179,7 +178,7 @@ class TestRepositoryCitableURLs( ShedTwillTestCase ):
|
||||
strings_displayed = [ '/repository', 'view_repository', 'id=' + encoded_repository_id ]
|
||||
strings_displayed.extend( [ 'The+change+log', 'does+not+include+revision', invalid_changeset_hash, 'status=error' ] )
|
||||
strings_displayed_in_iframe = [ 'user1', 'filtering_0420', 'Galaxy filtering tool for test 0420' ]
|
||||
strings_displayed_in_iframe.append( 'Sharable link to this repository revision:' )
|
||||
strings_displayed_in_iframe.append( 'Link to this repository revision:' )
|
||||
strings_displayed_in_iframe.append( '%s/view/user1/filtering_0420/%s' % ( self.url, invalid_changeset_hash ) )
|
||||
strings_not_displayed_in_iframe = []
|
||||
self.load_citable_url( username='user1',
|
||||
|
||||
@@ -54,8 +54,7 @@ class TestToolShedBrowseUtilities( ShedTwillTestCase ):
|
||||
description='Description of Test 0430 Galaxy Utilities category' )
|
||||
self.logout()
|
||||
self.login( email=common.test_user_1_email, username=common.test_user_1_name )
|
||||
strings_displayed = [ 'Repository %s' % "'%s'" % datatypes_repository_name,
|
||||
'Repository %s has been created' % "<b>%s</b>" % datatypes_repository_name ]
|
||||
strings_displayed = self.expect_repo_created_strings(datatypes_repository_name)
|
||||
repository = self.get_or_create_repository( name=datatypes_repository_name,
|
||||
description=datatypes_repository_description,
|
||||
long_description=datatypes_repository_long_description,
|
||||
@@ -82,8 +81,7 @@ class TestToolShedBrowseUtilities( ShedTwillTestCase ):
|
||||
description='Description of Test 0430 Galaxy Utilities category' )
|
||||
self.logout()
|
||||
self.login( email=common.test_user_1_email, username=common.test_user_1_name )
|
||||
strings_displayed = [ 'Repository %s' % "'%s'" % emboss_repository_name,
|
||||
'Repository %s has been created' % "<b>%s</b>" % emboss_repository_name ]
|
||||
strings_displayed = self.expect_repo_created_strings(emboss_repository_name)
|
||||
emboss_repository = self.get_or_create_repository( name=emboss_repository_name,
|
||||
description=emboss_repository_description,
|
||||
long_description=emboss_repository_long_description,
|
||||
@@ -119,8 +117,7 @@ class TestToolShedBrowseUtilities( ShedTwillTestCase ):
|
||||
description='Description of Test 0430 Galaxy Utilities category' )
|
||||
self.logout()
|
||||
self.login( email=common.test_user_1_email, username=common.test_user_1_name )
|
||||
strings_displayed = [ 'Repository %s' % "'%s'" % freebayes_repository_name,
|
||||
'Repository %s has been created' % "<b>%s</b>" % freebayes_repository_name ]
|
||||
strings_displayed = self.expect_repo_created_strings(freebayes_repository_name)
|
||||
repository = self.get_or_create_repository( name=freebayes_repository_name,
|
||||
description=freebayes_repository_description,
|
||||
long_description=freebayes_repository_long_description,
|
||||
|
||||
@@ -75,8 +75,7 @@ class TestSkipToolTestFeature( ShedTwillTestCase ):
|
||||
self.logout()
|
||||
self.login( email=common.test_user_1_email, username=common.test_user_1_name )
|
||||
category = self.test_db_util.get_category_by_name( category_name )
|
||||
strings_displayed = [ 'Repository %s' % "'%s'" % repository_name,
|
||||
'Repository %s has been created' % "<b>%s</b>" % repository_name ]
|
||||
strings_displayed = self.expect_repo_created_strings(repository_name)
|
||||
repository = self.get_or_create_repository( name=repository_name,
|
||||
description=repository_description,
|
||||
long_description=repository_long_description,
|
||||
|
||||
@@ -57,8 +57,7 @@ class TestInstallRepositoryMultipleOwners( ShedTwillTestCase ):
|
||||
category = self.create_category( name='Test 0120', description='Description of test 0120' )
|
||||
self.logout()
|
||||
self.login( email=common.test_user_2_email, username=common.test_user_2_name )
|
||||
strings_displayed = [ 'Repository %s' % "'%s'" % datatypes_repository_name,
|
||||
'Repository %s has been created' % "<b>%s</b>" % datatypes_repository_name ]
|
||||
strings_displayed = self.expect_repo_created_strings(datatypes_repository_name)
|
||||
repository = self.get_or_create_repository( name=datatypes_repository_name,
|
||||
description=datatypes_repository_description,
|
||||
long_description=datatypes_repository_long_description,
|
||||
@@ -99,8 +98,7 @@ class TestInstallRepositoryMultipleOwners( ShedTwillTestCase ):
|
||||
category = self.create_category( name='Test 0120', description='Description of test 0120' )
|
||||
self.logout()
|
||||
self.login( email=common.test_user_1_email, username=common.test_user_1_name )
|
||||
strings_displayed = [ 'Repository %s' % "'%s'" % tool_repository_name,
|
||||
'Repository %s has been created' % "<b>%s</b>" % tool_repository_name ]
|
||||
strings_displayed = self.expect_repo_created_strings(tool_repository_name)
|
||||
repository = self.get_or_create_repository( name=tool_repository_name,
|
||||
description=tool_repository_description,
|
||||
long_description=tool_repository_long_description,
|
||||
|
||||
@@ -441,6 +441,78 @@ class HistorySerializerTestCase( BaseTestCase ):
|
||||
self.log( 'serialized should jsonify well' )
|
||||
self.assertIsJsonifyable( serialized )
|
||||
|
||||
def _history_state_from_states_and_deleted( self, user, hda_state_and_deleted_tuples ):
|
||||
history = self.history_manager.create( name='name', user=user )
|
||||
for state, deleted in hda_state_and_deleted_tuples:
|
||||
hda = self.hda_manager.create( history=history )
|
||||
hda = self.hda_manager.update( hda, dict( state=state, deleted=deleted ) )
|
||||
history_state = self.history_serializer.serialize( history, [ 'state' ] )[ 'state' ]
|
||||
return history_state
|
||||
|
||||
def test_state( self ):
|
||||
dataset_states = model.Dataset.states
|
||||
user2 = self.user_manager.create( **user2_data )
|
||||
|
||||
ready_states = [ ( state, False ) for state in [ dataset_states.OK, dataset_states.OK ] ]
|
||||
|
||||
self.log( 'a history\'s serialized state should be running if any of its datasets are running' )
|
||||
self.assertEqual( 'running', self._history_state_from_states_and_deleted( user2,
|
||||
ready_states + [( dataset_states.RUNNING, False )] ))
|
||||
self.assertEqual( 'running', self._history_state_from_states_and_deleted( user2,
|
||||
ready_states + [( dataset_states.SETTING_METADATA, False )] ))
|
||||
self.assertEqual( 'running', self._history_state_from_states_and_deleted( user2,
|
||||
ready_states + [( dataset_states.UPLOAD, False )] ))
|
||||
|
||||
self.log( 'a history\'s serialized state should be queued if any of its datasets are queued' )
|
||||
self.assertEqual( 'queued', self._history_state_from_states_and_deleted( user2,
|
||||
ready_states + [( dataset_states.QUEUED, False )] ))
|
||||
|
||||
self.log( 'a history\'s serialized state should be error if any of its datasets are errored' )
|
||||
self.assertEqual( 'error', self._history_state_from_states_and_deleted( user2,
|
||||
ready_states + [( dataset_states.ERROR, False )] ))
|
||||
self.assertEqual( 'error', self._history_state_from_states_and_deleted( user2,
|
||||
ready_states + [( dataset_states.FAILED_METADATA, False )] ))
|
||||
|
||||
self.log( 'a history\'s serialized state should be ok if *all* of its datasets are ok' )
|
||||
self.assertEqual( 'ok', self._history_state_from_states_and_deleted( user2, ready_states ))
|
||||
|
||||
self.log( 'a history\'s serialized state should be not be affected by deleted datasets' )
|
||||
self.assertEqual( 'ok', self._history_state_from_states_and_deleted( user2,
|
||||
ready_states + [( dataset_states.RUNNING, True )] ))
|
||||
|
||||
def test_contents( self ):
|
||||
user2 = self.user_manager.create( **user2_data )
|
||||
history1 = self.history_manager.create( name='history1', user=user2 )
|
||||
|
||||
self.log( 'a history with no contents should be properly reflected in empty, etc.' )
|
||||
keys = [ 'empty', 'count', 'state_ids', 'state_details', 'state', 'hdas' ]
|
||||
serialized = self.history_serializer.serialize( history1, keys )
|
||||
self.assertEqual( serialized[ 'state' ], 'new' )
|
||||
self.assertEqual( serialized[ 'empty' ], True )
|
||||
self.assertEqual( serialized[ 'count' ], 0 )
|
||||
self.assertEqual( sum( serialized[ 'state_details' ].values() ), 0 )
|
||||
self.assertEqual( serialized[ 'state_ids' ][ 'ok' ], [] )
|
||||
self.assertIsInstance( serialized[ 'hdas' ], list )
|
||||
|
||||
self.log( 'a history with contents should be properly reflected in empty, etc.' )
|
||||
hda1 = self.hda_manager.create( history=history1, hid=1 )
|
||||
self.hda_manager.update( hda1, dict( state='ok' ) )
|
||||
|
||||
serialized = self.history_serializer.serialize( history1, keys )
|
||||
self.assertEqual( serialized[ 'state' ], 'ok' )
|
||||
self.assertEqual( serialized[ 'empty' ], False )
|
||||
self.assertEqual( serialized[ 'count' ], 1 )
|
||||
self.assertEqual( serialized[ 'state_details' ][ 'ok' ], 1 )
|
||||
self.assertIsInstance( serialized[ 'state_ids' ][ 'ok' ], list )
|
||||
self.assertIsInstance( serialized[ 'hdas' ], list )
|
||||
self.assertIsInstance( serialized[ 'hdas' ][0], basestring )
|
||||
|
||||
serialized = self.history_serializer.serialize( history1, [ 'contents' ] )
|
||||
self.assertHasKeys( serialized[ 'contents' ][0], [ 'id', 'name', 'peek', 'create_time' ])
|
||||
|
||||
self.log( 'serialized should jsonify well' )
|
||||
self.assertIsJsonifyable( serialized )
|
||||
|
||||
|
||||
# # =============================================================================
|
||||
# class HistoryDeserializerTestCase( BaseTestCase ):
|
||||
|
||||
Reference in New Issue
Block a user