sequenceserver 2.0.0 → 2.1.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of sequenceserver might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/lib/sequenceserver/api_errors.rb +24 -2
- data/lib/sequenceserver/blast/job.rb +41 -7
- data/lib/sequenceserver/blast/report.rb +36 -30
- data/lib/sequenceserver/config.rb +49 -27
- data/lib/sequenceserver/job.rb +13 -3
- data/lib/sequenceserver/job_remover.rb +25 -29
- data/lib/sequenceserver/refinements.rb +15 -0
- data/lib/sequenceserver/routes.rb +69 -7
- data/lib/sequenceserver/sequence.rb +8 -7
- data/lib/sequenceserver/sys.rb +2 -2
- data/lib/sequenceserver/version.rb +1 -1
- data/lib/sequenceserver/zip_file_generator.rb +56 -0
- data/lib/sequenceserver.rb +1 -0
- data/public/config.js +149 -143
- data/public/css/sequenceserver.css +44 -3
- data/public/css/sequenceserver.min.css +3 -3
- data/public/js/alignment_exporter.js +16 -8
- data/public/js/circos.js +370 -234
- data/public/js/cloud_share_modal.js +216 -0
- data/public/js/databases.js +144 -0
- data/public/js/databases_tree.js +42 -113
- data/public/js/dnd.js +164 -0
- data/public/js/error_modal.js +4 -11
- data/public/js/exporter.js +7 -3
- data/public/js/form.js +260 -0
- data/public/js/grapher.js +113 -106
- data/public/js/hit.js +80 -67
- data/public/js/hits_overview.js +2 -2
- data/public/js/hsp.js +343 -288
- data/public/js/jquery_world.js +4 -4
- data/public/js/mailto.js +36 -0
- data/public/js/options.js +84 -0
- data/public/js/query.js +319 -59
- data/public/js/report.js +315 -269
- data/public/js/report_root.js +75 -0
- data/public/js/search.js +28 -1011
- data/public/js/search_button.js +195 -0
- data/public/js/sequence.js +2409 -2411
- data/public/js/sequence_modal.js +152 -159
- data/public/js/share_url.js +23 -0
- data/public/js/sidebar.js +262 -83
- data/public/js/tests/database.spec.js +60 -0
- data/public/js/tests/mock_data/databases.json +91 -0
- data/public/js/tests/mock_data/long_response.json +269 -0
- data/public/js/tests/mock_data/short_response.json +2240 -0
- data/public/js/tests/report.spec.js +99 -0
- data/public/js/tests/search_button.spec.js +14 -0
- data/public/js/tests/search_query.spec.js +41 -0
- data/public/packages/circosJS@1.7.0.js +1640 -0
- data/public/packages/jquery-ui@1.11.4.js +16624 -0
- data/public/sequenceserver-report.min.js +2425 -19
- data/public/sequenceserver-search.min.js +2337 -15
- data/public/vendor/github/jspm/nodelibs-assert@0.1.0/index.js +2 -0
- data/public/vendor/github/jspm/{nodelibs-buffer@0.1.0 → nodelibs-assert@0.1.0}/package.json +1 -1
- data/public/vendor/github/jspm/nodelibs-assert@0.1.0.js +1 -0
- data/public/vendor/github/jspm/nodelibs-buffer@0.1.1/package.json +6 -0
- data/public/vendor/github/jspm/nodelibs-buffer@0.1.1.js +1 -0
- data/public/vendor/github/jspm/{nodelibs-process@0.1.1 → nodelibs-process@0.1.2}/package.json +2 -2
- data/public/vendor/github/jspm/nodelibs-process@0.1.2.js +1 -0
- data/public/vendor/github/jspm/nodelibs-vm@0.1.0/index.js +2 -0
- data/public/vendor/github/jspm/nodelibs-vm@0.1.0/package.json +6 -0
- data/public/vendor/github/jspm/nodelibs-vm@0.1.0.js +1 -0
- data/public/vendor/npm/assert@1.5.0/CHANGELOG.md +8 -0
- data/public/vendor/npm/assert@1.5.0/README.md +105 -0
- data/public/vendor/npm/assert@1.5.0/assert.js +327 -0
- data/public/vendor/npm/assert@1.5.0/package.json +32 -0
- data/public/vendor/npm/assert@1.5.0/test.js +288 -0
- data/public/vendor/npm/assert@1.5.0.js +1 -0
- data/public/vendor/npm/{base64-js@0.0.8/LICENSE.MIT → base64-js@1.5.1/LICENSE} +1 -1
- data/public/vendor/npm/{base64-js@0.0.8 → base64-js@1.5.1}/README.md +10 -7
- data/public/vendor/npm/base64-js@1.5.1/base64js.min.js +3 -0
- data/public/vendor/npm/base64-js@1.5.1/index.d.ts +3 -0
- data/public/vendor/npm/base64-js@1.5.1/index.js +151 -0
- data/public/vendor/npm/base64-js@1.5.1/package.json +47 -0
- data/public/vendor/npm/base64-js@1.5.1.js +1 -0
- data/public/vendor/npm/buffer@5.7.1/AUTHORS.md +70 -0
- data/public/vendor/npm/{buffer@3.4.3 → buffer@5.7.1}/README.md +111 -41
- data/public/vendor/npm/buffer@5.7.1/index.d.ts +186 -0
- data/public/vendor/npm/buffer@5.7.1/index.js +1817 -0
- data/public/vendor/npm/buffer@5.7.1/package.json +96 -0
- data/public/vendor/npm/buffer@5.7.1.js +1 -0
- data/public/vendor/npm/core-util-is@1.0.3/LICENSE +19 -0
- data/public/vendor/npm/core-util-is@1.0.3/lib/util.js +64 -0
- data/public/vendor/npm/{core-util-is@1.0.1 → core-util-is@1.0.3}/package.json +13 -1
- data/public/vendor/npm/core-util-is@1.0.3.js +1 -0
- data/public/vendor/npm/events@1.0.2/tests/add-listeners.js +2 -2
- data/public/vendor/npm/events@1.0.2/tests/check-listener-leaks.js +3 -3
- data/public/vendor/npm/events@1.0.2/tests/common.js +1 -1
- data/public/vendor/npm/events@1.0.2/tests/index.js +13 -13
- data/public/vendor/npm/events@1.0.2/tests/listeners-side-effects.js +2 -2
- data/public/vendor/npm/events@1.0.2/tests/listeners.js +2 -2
- data/public/vendor/npm/events@1.0.2/tests/max-listeners.js +2 -2
- data/public/vendor/npm/events@1.0.2/tests/modify-in-emit.js +2 -2
- data/public/vendor/npm/events@1.0.2/tests/num-args.js +2 -2
- data/public/vendor/npm/events@1.0.2/tests/once.js +2 -2
- data/public/vendor/npm/events@1.0.2/tests/remove-all-listeners.js +3 -3
- data/public/vendor/npm/events@1.0.2/tests/remove-listeners.js +3 -3
- data/public/vendor/npm/events@1.0.2/tests/set-max-listeners-side-effects.js +2 -2
- data/public/vendor/npm/events@1.0.2/tests/subclass.js +3 -3
- data/public/vendor/npm/events@1.0.2.js +1 -1
- data/public/vendor/npm/ieee754@1.2.1/LICENSE +11 -0
- data/public/vendor/npm/{ieee754@1.1.6 → ieee754@1.2.1}/README.md +12 -8
- data/public/vendor/npm/ieee754@1.2.1/index.d.ts +10 -0
- data/public/vendor/npm/{ieee754@1.1.6 → ieee754@1.2.1}/index.js +6 -6
- data/public/vendor/npm/ieee754@1.2.1/package.json +52 -0
- data/public/vendor/npm/ieee754@1.2.1.js +1 -0
- data/public/vendor/npm/{is-array@1.0.1 → indexof@0.0.1}/Makefile +3 -3
- data/public/vendor/npm/indexof@0.0.1/Readme.md +15 -0
- data/public/vendor/npm/indexof@0.0.1/component.json +10 -0
- data/public/vendor/npm/indexof@0.0.1/index.js +11 -0
- data/public/vendor/npm/indexof@0.0.1/package.json +12 -0
- data/public/vendor/npm/indexof@0.0.1.js +1 -0
- data/public/vendor/npm/inherits@2.0.1/inherits.js +1 -1
- data/public/vendor/npm/inherits@2.0.1.js +1 -1
- data/public/vendor/npm/isarray@0.0.1.js +1 -1
- data/public/vendor/npm/js-tokens@4.0.0/index.js +23 -0
- data/public/vendor/npm/js-tokens@4.0.0/package.json +30 -0
- data/public/vendor/npm/js-tokens@4.0.0.js +1 -0
- data/public/vendor/npm/loose-envify@1.4.0/LICENSE +21 -0
- data/public/vendor/npm/loose-envify@1.4.0/README.md +45 -0
- data/public/vendor/npm/loose-envify@1.4.0/cli.js +12 -0
- data/public/vendor/npm/loose-envify@1.4.0/custom.js +3 -0
- data/public/vendor/npm/loose-envify@1.4.0/index.js +5 -0
- data/public/vendor/npm/loose-envify@1.4.0/loose-envify.js +33 -0
- data/public/vendor/npm/loose-envify@1.4.0/package.json +36 -0
- data/public/vendor/npm/loose-envify@1.4.0/replace.js +52 -0
- data/public/vendor/npm/loose-envify@1.4.0.js +1 -0
- data/public/vendor/npm/object-assign@4.1.1/index.js +90 -0
- data/public/vendor/npm/object-assign@4.1.1/package.json +42 -0
- data/public/vendor/npm/object-assign@4.1.1.js +1 -0
- data/public/vendor/npm/path-browserify@0.0.0/index.js +1 -1
- data/public/vendor/npm/path-browserify@0.0.0.js +1 -1
- data/public/vendor/npm/{process@0.10.1 → process@0.11.10}/README.md +4 -1
- data/public/vendor/npm/process@0.11.10/browser.js +184 -0
- data/public/vendor/npm/{process@0.10.1 → process@0.11.10}/package.json +10 -1
- data/public/vendor/npm/process@0.11.10/test.js +185 -0
- data/public/vendor/npm/process@0.11.10.js +1 -0
- data/public/vendor/npm/react-dom@18.0.0/LICENSE +21 -0
- data/public/vendor/npm/react-dom@18.0.0/README.md +50 -0
- data/public/vendor/npm/react-dom@18.0.0/cjs/react-dom-server-legacy.browser.development.js +4771 -0
- data/public/vendor/npm/react-dom@18.0.0/cjs/react-dom-server-legacy.browser.production.min.js +85 -0
- data/public/vendor/npm/react-dom@18.0.0/cjs/react-dom-server-legacy.node.development.js +4813 -0
- data/public/vendor/npm/react-dom@18.0.0/cjs/react-dom-server-legacy.node.production.min.js +1705 -0
- data/public/vendor/npm/react-dom@18.0.0/cjs/react-dom-server.browser.development.js +4746 -0
- data/public/vendor/npm/react-dom@18.0.0/cjs/react-dom-server.browser.production.min.js +90 -0
- data/public/vendor/npm/react-dom@18.0.0/cjs/react-dom-server.node.development.js +4714 -0
- data/public/vendor/npm/react-dom@18.0.0/cjs/react-dom-server.node.production.min.js +1746 -0
- data/public/vendor/npm/react-dom@18.0.0/cjs/react-dom-test-utils.development.js +1017 -0
- data/public/vendor/npm/react-dom@18.0.0/cjs/react-dom-test-utils.production.min.js +617 -0
- data/public/vendor/npm/react-dom@18.0.0/cjs/react-dom.development.js +20092 -0
- data/public/vendor/npm/react-dom@18.0.0/cjs/react-dom.production.min.js +322 -0
- data/public/vendor/npm/react-dom@18.0.0/cjs/react-dom.profiling.min.js +364 -0
- data/public/vendor/npm/react-dom@18.0.0/client.js +27 -0
- data/public/vendor/npm/react-dom@18.0.0/index.js +23 -0
- data/public/vendor/npm/react-dom@18.0.0/package.json +62 -0
- data/public/vendor/npm/react-dom@18.0.0/profiling.js +23 -0
- data/public/vendor/npm/react-dom@18.0.0/server.browser.js +19 -0
- data/public/vendor/npm/react-dom@18.0.0/server.js +3 -0
- data/public/vendor/npm/react-dom@18.0.0/server.node.js +19 -0
- data/public/vendor/npm/react-dom@18.0.0/test-utils.js +9 -0
- data/public/vendor/npm/react-dom@18.0.0/umd/react-dom-server-legacy.browser.development.js +4770 -0
- data/public/vendor/npm/react-dom@18.0.0/umd/react-dom-server-legacy.browser.production.min.js +72 -0
- data/public/vendor/npm/react-dom@18.0.0/umd/react-dom-server.browser.development.js +4745 -0
- data/public/vendor/npm/react-dom@18.0.0/umd/react-dom-server.browser.production.min.js +74 -0
- data/public/vendor/npm/react-dom@18.0.0/umd/react-dom-test-utils.development.js +1013 -0
- data/public/vendor/npm/react-dom@18.0.0/umd/react-dom-test-utils.production.min.js +625 -0
- data/public/vendor/npm/react-dom@18.0.0/umd/react-dom.development.js +20106 -0
- data/public/vendor/npm/react-dom@18.0.0/umd/react-dom.production.min.js +269 -0
- data/public/vendor/npm/react-dom@18.0.0/umd/react-dom.profiling.min.js +285 -0
- data/public/vendor/npm/react-dom@18.0.0.js +1 -0
- data/public/vendor/npm/react@18.0.0/LICENSE +21 -0
- data/public/vendor/npm/react@18.0.0/README.md +13 -0
- data/public/vendor/npm/react@18.0.0/cjs/react-jsx-dev-runtime.development.js +837 -0
- data/public/vendor/npm/react@18.0.0/cjs/react-jsx-dev-runtime.production.min.js +10 -0
- data/public/vendor/npm/react@18.0.0/cjs/react-jsx-dev-runtime.profiling.min.js +10 -0
- data/public/vendor/npm/react@18.0.0/cjs/react-jsx-runtime.development.js +849 -0
- data/public/vendor/npm/react@18.0.0/cjs/react-jsx-runtime.production.min.js +38 -0
- data/public/vendor/npm/react@18.0.0/cjs/react-jsx-runtime.profiling.min.js +38 -0
- data/public/vendor/npm/react@18.0.0/cjs/react.development.js +1746 -0
- data/public/vendor/npm/react@18.0.0/cjs/react.production.min.js +26 -0
- data/public/vendor/npm/react@18.0.0/cjs/react.shared-subset.development.js +10 -0
- data/public/vendor/npm/react@18.0.0/cjs/react.shared-subset.production.min.js +12 -0
- data/public/vendor/npm/react@18.0.0/index.js +9 -0
- data/public/vendor/npm/react@18.0.0/jsx-dev-runtime.js +9 -0
- data/public/vendor/npm/react@18.0.0/jsx-runtime.js +9 -0
- data/public/vendor/npm/react@18.0.0/package.json +47 -0
- data/public/vendor/npm/react@18.0.0/react.shared-subset.js +9 -0
- data/public/vendor/npm/react@18.0.0/umd/react.development.js +2186 -0
- data/public/vendor/npm/react@18.0.0/umd/react.production.min.js +33 -0
- data/public/vendor/npm/react@18.0.0/umd/react.profiling.min.js +33 -0
- data/public/vendor/npm/react@18.0.0.js +1 -0
- data/public/vendor/npm/readable-stream@1.1.14/LICENSE +18 -0
- data/public/vendor/npm/readable-stream@1.1.14/duplex.js +2 -0
- data/public/vendor/npm/{readable-stream@1.1.13 → readable-stream@1.1.14}/lib/_stream_duplex.js +5 -5
- data/public/vendor/npm/{readable-stream@1.1.13 → readable-stream@1.1.14}/lib/_stream_passthrough.js +3 -3
- data/public/vendor/npm/{readable-stream@1.1.13 → readable-stream@1.1.14}/lib/_stream_readable.js +10 -10
- data/public/vendor/npm/{readable-stream@1.1.13 → readable-stream@1.1.14}/lib/_stream_transform.js +4 -4
- data/public/vendor/npm/{readable-stream@1.1.13 → readable-stream@1.1.14}/lib/_stream_writable.js +6 -6
- data/public/vendor/npm/{readable-stream@1.1.13 → readable-stream@1.1.14}/package.json +1 -1
- data/public/vendor/npm/readable-stream@1.1.14/passthrough.js +2 -0
- data/public/vendor/npm/readable-stream@1.1.14/readable.js +13 -0
- data/public/vendor/npm/readable-stream@1.1.14/transform.js +2 -0
- data/public/vendor/npm/readable-stream@1.1.14/writable.js +2 -0
- data/public/vendor/npm/readable-stream@1.1.14.js +1 -0
- data/public/vendor/npm/scheduler@0.21.0/LICENSE +21 -0
- data/public/vendor/npm/scheduler@0.21.0/README.md +9 -0
- data/public/vendor/npm/scheduler@0.21.0/cjs/scheduler-unstable_mock.development.js +530 -0
- data/public/vendor/npm/scheduler@0.21.0/cjs/scheduler-unstable_mock.production.min.js +20 -0
- data/public/vendor/npm/scheduler@0.21.0/cjs/scheduler-unstable_post_task.development.js +153 -0
- data/public/vendor/npm/scheduler@0.21.0/cjs/scheduler-unstable_post_task.production.min.js +14 -0
- data/public/vendor/npm/scheduler@0.21.0/cjs/scheduler.development.js +444 -0
- data/public/vendor/npm/scheduler@0.21.0/cjs/scheduler.production.min.js +19 -0
- data/public/vendor/npm/scheduler@0.21.0/index.js +9 -0
- data/public/vendor/npm/scheduler@0.21.0/package.json +36 -0
- data/public/vendor/npm/scheduler@0.21.0/umd/scheduler-unstable_mock.development.js +701 -0
- data/public/vendor/npm/scheduler@0.21.0/umd/scheduler-unstable_mock.production.min.js +21 -0
- data/public/vendor/npm/scheduler@0.21.0/umd/scheduler.development.js +154 -0
- data/public/vendor/npm/scheduler@0.21.0/umd/scheduler.production.min.js +148 -0
- data/public/vendor/npm/scheduler@0.21.0/umd/scheduler.profiling.min.js +148 -0
- data/public/vendor/npm/scheduler@0.21.0/unstable_mock.js +9 -0
- data/public/vendor/npm/scheduler@0.21.0/unstable_post_task.js +9 -0
- data/public/vendor/npm/scheduler@0.21.0.js +1 -0
- data/public/vendor/npm/stream-browserify@1.0.0/index.js +7 -7
- data/public/vendor/npm/stream-browserify@1.0.0/test/buf.js +5 -5
- data/public/vendor/npm/stream-browserify@1.0.0.js +1 -1
- data/public/vendor/npm/string_decoder@0.10.31/index.js +2 -2
- data/public/vendor/npm/string_decoder@0.10.31.js +1 -1
- data/public/vendor/npm/util@0.10.3/support/isBuffer.js +1 -1
- data/public/vendor/npm/util@0.10.3/test/browser/inspect.js +2 -2
- data/public/vendor/npm/util@0.10.3/test/browser/is.js +3 -3
- data/public/vendor/npm/util@0.10.3/test/node/debug.js +4 -4
- data/public/vendor/npm/util@0.10.3/test/node/format.js +2 -2
- data/public/vendor/npm/util@0.10.3/test/node/inspect.js +3 -3
- data/public/vendor/npm/util@0.10.3/test/node/log.js +3 -3
- data/public/vendor/npm/util@0.10.3/test/node/util.js +3 -3
- data/public/vendor/npm/util@0.10.3/util.js +3 -3
- data/public/vendor/npm/util@0.10.3.js +1 -1
- data/public/vendor/npm/vm-browserify@0.0.4/LICENSE +18 -0
- data/public/vendor/npm/vm-browserify@0.0.4/example/run/bundle.js +376 -0
- data/public/vendor/npm/vm-browserify@0.0.4/example/run/entry.js +6 -0
- data/public/vendor/npm/vm-browserify@0.0.4/example/run/index.html +9 -0
- data/public/vendor/npm/vm-browserify@0.0.4/example/run/server.js +6 -0
- data/public/vendor/npm/vm-browserify@0.0.4/index.js +139 -0
- data/public/vendor/npm/vm-browserify@0.0.4/package.json +46 -0
- data/public/vendor/npm/vm-browserify@0.0.4/readme.markdown +67 -0
- data/public/vendor/npm/vm-browserify@0.0.4/test/vm.js +34 -0
- data/public/vendor/npm/vm-browserify@0.0.4.js +1 -0
- data/public/vendor/npm/webshim@1.15.8/Gruntfile.js +4 -4
- data/public/vendor/npm/webshim@1.15.8/build/combobuild.js +2 -2
- data/public/vendor/npm/webshim@1.15.8/js-webshim/dev/shims/color-picker.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/js-webshim/dev/shims/combos/10.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/js-webshim/dev/shims/combos/11.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/js-webshim/dev/shims/combos/17.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/js-webshim/dev/shims/combos/5.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/js-webshim/dev/shims/combos/6.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/js-webshim/dev/shims/combos/9.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/js-webshim/dev/shims/es6.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/js-webshim/dev/shims/excanvas.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/js-webshim/dev/shims/form-number-date-ui.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/js-webshim/dev/shims/moxie/js/moxie-html4.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/js-webshim/dev/shims/moxie/js/moxie-swf.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/js-webshim/dev/shims/sizzle.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/js-webshim/minified/shims/es6.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/src/shims/color-picker.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/src/shims/combos/10.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/src/shims/combos/11.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/src/shims/combos/17.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/src/shims/combos/5.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/src/shims/combos/6.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/src/shims/combos/9.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/src/shims/es6.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/src/shims/excanvas.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/src/shims/form-number-date-ui.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/src/shims/moxie/js/moxie-html4.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/src/shims/moxie/js/moxie-swf.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/src/shims/sizzle.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/tests/dist/jquery.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/tests/jquery/unit/core.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/tests/jquery/unit/event.js +1388 -711
- data/public/vendor/npm/webshim@1.15.8/tests/qunit/qunit.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/tests/test-ext/jquery-1-custom.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/tests/test-ext/jquery-2-custom.js +1 -1
- data/public/vendor/npm/webshim@1.15.8/tests/test-ext/punycode.js +1 -1
- data/public/vendor/system-polyfills.js +865 -1
- data/views/blastn_options.erb +291 -0
- data/views/blastp_options.erb +288 -0
- data/views/blastx_options.erb +318 -0
- data/views/error.erb +12 -0
- data/views/layout.erb +2 -30
- data/views/report.erb +0 -8
- data/views/search.erb +16 -9
- data/views/tblastn_options.erb +266 -0
- data/views/tblastx_options.erb +291 -0
- metadata +318 -439
- data/public/vendor/github/jspm/nodelibs-buffer@0.1.0.js +0 -1
- data/public/vendor/github/jspm/nodelibs-module@0.1.0/index.js +0 -1
- data/public/vendor/github/jspm/nodelibs-module@0.1.0.js +0 -1
- data/public/vendor/github/jspm/nodelibs-process@0.1.1.js +0 -1
- data/public/vendor/npm/amdefine@1.0.0/LICENSE +0 -58
- data/public/vendor/npm/amdefine@1.0.0/README.md +0 -171
- data/public/vendor/npm/amdefine@1.0.0/amdefine.js +0 -200
- data/public/vendor/npm/amdefine@1.0.0/intercept.js +0 -24
- data/public/vendor/npm/amdefine@1.0.0/package.json +0 -16
- data/public/vendor/npm/amdefine@1.0.0.js +0 -1
- data/public/vendor/npm/base62@0.1.1/LICENSE +0 -20
- data/public/vendor/npm/base62@0.1.1/Readme.md +0 -30
- data/public/vendor/npm/base62@0.1.1/base62.js +0 -28
- data/public/vendor/npm/base62@0.1.1/package.json +0 -21
- data/public/vendor/npm/base62@0.1.1/test/test.js +0 -13
- data/public/vendor/npm/base62@0.1.1.js +0 -1
- data/public/vendor/npm/base64-js@0.0.8/lib/b64.js +0 -125
- data/public/vendor/npm/base64-js@0.0.8/package.json +0 -34
- data/public/vendor/npm/base64-js@0.0.8/test/convert.js +0 -39
- data/public/vendor/npm/base64-js@0.0.8/test/url-safe.js +0 -15
- data/public/vendor/npm/base64-js@0.0.8.js +0 -1
- data/public/vendor/npm/buffer@3.4.3/index.js +0 -1533
- data/public/vendor/npm/buffer@3.4.3/package.json +0 -67
- data/public/vendor/npm/buffer@3.4.3/test/_polyfill.js +0 -152
- data/public/vendor/npm/buffer@3.4.3/test/base64.js +0 -33
- data/public/vendor/npm/buffer@3.4.3/test/basic.js +0 -58
- data/public/vendor/npm/buffer@3.4.3/test/compare.js +0 -53
- data/public/vendor/npm/buffer@3.4.3/test/constructor.js +0 -132
- data/public/vendor/npm/buffer@3.4.3/test/deprecated.js +0 -21
- data/public/vendor/npm/buffer@3.4.3/test/from-string.js +0 -105
- data/public/vendor/npm/buffer@3.4.3/test/methods.js +0 -109
- data/public/vendor/npm/buffer@3.4.3/test/node/README.txt +0 -1
- data/public/vendor/npm/buffer@3.4.3/test/node/test-buffer-ascii.js +0 -20
- data/public/vendor/npm/buffer@3.4.3/test/node/test-buffer-bytelength.js +0 -38
- data/public/vendor/npm/buffer@3.4.3/test/node/test-buffer-concat.js +0 -26
- data/public/vendor/npm/buffer@3.4.3/test/node/test-buffer-indexof.js +0 -78
- data/public/vendor/npm/buffer@3.4.3/test/node/test-buffer-inspect.js +0 -31
- data/public/vendor/npm/buffer@3.4.3/test/node/test-buffer.js +0 -804
- data/public/vendor/npm/buffer@3.4.3/test/node-es6/README.txt +0 -1
- data/public/vendor/npm/buffer@3.4.3/test/node-es6/test-buffer-arraybuffer.js +0 -37
- data/public/vendor/npm/buffer@3.4.3/test/node-es6/test-buffer-iterator.js +0 -32
- data/public/vendor/npm/buffer@3.4.3/test/slice.js +0 -33
- data/public/vendor/npm/buffer@3.4.3/test/static.js +0 -32
- data/public/vendor/npm/buffer@3.4.3/test/to-string.js +0 -106
- data/public/vendor/npm/buffer@3.4.3/test/write.js +0 -90
- data/public/vendor/npm/buffer@3.4.3.js +0 -1
- data/public/vendor/npm/core-util-is@1.0.1/float.patch +0 -604
- data/public/vendor/npm/core-util-is@1.0.1/lib/util.js +0 -66
- data/public/vendor/npm/core-util-is@1.0.1/util.js +0 -66
- data/public/vendor/npm/core-util-is@1.0.1.js +0 -1
- data/public/vendor/npm/envify@3.4.0/README.md +0 -145
- data/public/vendor/npm/envify@3.4.0/bin/envify +0 -17
- data/public/vendor/npm/envify@3.4.0/custom.js +0 -33
- data/public/vendor/npm/envify@3.4.0/index.js +0 -4
- data/public/vendor/npm/envify@3.4.0/package.json +0 -35
- data/public/vendor/npm/envify@3.4.0/visitors.js +0 -33
- data/public/vendor/npm/envify@3.4.0.js +0 -1
- data/public/vendor/npm/esprima-fb@13001.1001.0-dev-harmony-fb/bin/esparse.js +0 -90
- data/public/vendor/npm/esprima-fb@13001.1001.0-dev-harmony-fb/bin/esvalidate.js +0 -145
- data/public/vendor/npm/esprima-fb@13001.1001.0-dev-harmony-fb/esprima.js +0 -6191
- data/public/vendor/npm/esprima-fb@13001.1001.0-dev-harmony-fb/package.json +0 -72
- data/public/vendor/npm/esprima-fb@13001.1001.0-dev-harmony-fb/test/compat.js +0 -167
- data/public/vendor/npm/esprima-fb@13001.1001.0-dev-harmony-fb/test/reflect.js +0 -421
- data/public/vendor/npm/esprima-fb@13001.1001.0-dev-harmony-fb/test/run.js +0 -34
- data/public/vendor/npm/esprima-fb@13001.1001.0-dev-harmony-fb/test/runner.js +0 -418
- data/public/vendor/npm/esprima-fb@13001.1001.0-dev-harmony-fb/test/test.js +0 -34730
- data/public/vendor/npm/esprima-fb@13001.1001.0-dev-harmony-fb.js +0 -1
- data/public/vendor/npm/ieee754@1.1.6/LICENSE +0 -56
- data/public/vendor/npm/ieee754@1.1.6/package.json +0 -34
- data/public/vendor/npm/ieee754@1.1.6/test/basic.js +0 -20
- data/public/vendor/npm/ieee754@1.1.6.js +0 -1
- data/public/vendor/npm/is-array@1.0.1/History.md +0 -11
- data/public/vendor/npm/is-array@1.0.1/Readme.md +0 -27
- data/public/vendor/npm/is-array@1.0.1/component.json +0 -13
- data/public/vendor/npm/is-array@1.0.1/index.js +0 -33
- data/public/vendor/npm/is-array@1.0.1/package.json +0 -10
- data/public/vendor/npm/is-array@1.0.1/test/test.html +0 -46
- data/public/vendor/npm/is-array@1.0.1.js +0 -1
- data/public/vendor/npm/jstransform@10.1.0/LICENSE +0 -201
- data/public/vendor/npm/jstransform@10.1.0/README.md +0 -98
- data/public/vendor/npm/jstransform@10.1.0/jestEnvironment.js +0 -3
- data/public/vendor/npm/jstransform@10.1.0/jestPreprocessor.js +0 -8
- data/public/vendor/npm/jstransform@10.1.0/package.json +0 -52
- data/public/vendor/npm/jstransform@10.1.0/polyfill/Object.es6.js +0 -54
- data/public/vendor/npm/jstransform@10.1.0/src/__tests__/jstransform-test.js +0 -246
- data/public/vendor/npm/jstransform@10.1.0/src/__tests__/jstransform-utils-test.js +0 -31
- data/public/vendor/npm/jstransform@10.1.0/src/docblock.js +0 -86
- data/public/vendor/npm/jstransform@10.1.0/src/jstransform.js +0 -180
- data/public/vendor/npm/jstransform@10.1.0/src/utils.js +0 -386
- data/public/vendor/npm/jstransform@10.1.0/visitors/__tests__/es6-arrow-function-visitors-test.js +0 -57
- data/public/vendor/npm/jstransform@10.1.0/visitors/__tests__/es6-call-spread-visitors-test.js +0 -46
- data/public/vendor/npm/jstransform@10.1.0/visitors/__tests__/es6-class-visitors-test.js +0 -463
- data/public/vendor/npm/jstransform@10.1.0/visitors/__tests__/es6-destructuring-visitors-test.js +0 -144
- data/public/vendor/npm/jstransform@10.1.0/visitors/__tests__/es6-es7-object-integration-test.js +0 -40
- data/public/vendor/npm/jstransform@10.1.0/visitors/__tests__/es6-object-concise-method-visitors-test.js +0 -47
- data/public/vendor/npm/jstransform@10.1.0/visitors/__tests__/es6-object-short-notation-visitors-test.js +0 -33
- data/public/vendor/npm/jstransform@10.1.0/visitors/__tests__/es6-rest-param-visitors-test.js +0 -119
- data/public/vendor/npm/jstransform@10.1.0/visitors/__tests__/es6-template-visitors-test.js +0 -138
- data/public/vendor/npm/jstransform@10.1.0/visitors/__tests__/es7-rest-property-helpers-test.js +0 -47
- data/public/vendor/npm/jstransform@10.1.0/visitors/__tests__/es7-spread-property-visitors-test.js +0 -90
- data/public/vendor/npm/jstransform@10.1.0/visitors/__tests__/gen/generate-type-syntax-test.js +0 -40
- data/public/vendor/npm/jstransform@10.1.0/visitors/__tests__/gen/type-syntax-test.rec.js +0 -846
- data/public/vendor/npm/jstransform@10.1.0/visitors/__tests__/reserved-words-test.js +0 -40
- data/public/vendor/npm/jstransform@10.1.0/visitors/__tests__/type-alias-syntax-test.js +0 -34
- data/public/vendor/npm/jstransform@10.1.0/visitors/__tests__/type-class-syntax-test.js +0 -105
- data/public/vendor/npm/jstransform@10.1.0/visitors/__tests__/type-function-syntax-test.js +0 -126
- data/public/vendor/npm/jstransform@10.1.0/visitors/__tests__/type-interface-syntax-test.js +0 -29
- data/public/vendor/npm/jstransform@10.1.0/visitors/__tests__/type-object-method-syntax-test.js +0 -65
- data/public/vendor/npm/jstransform@10.1.0/visitors/__tests__/type-pattern-syntax-test.js +0 -45
- data/public/vendor/npm/jstransform@10.1.0/visitors/__tests__/type-syntax-test.js +0 -46
- data/public/vendor/npm/jstransform@10.1.0/visitors/__tests__/type-variable-declaration-syntax-test.js +0 -102
- data/public/vendor/npm/jstransform@10.1.0/visitors/es6-arrow-function-visitors.js +0 -66
- data/public/vendor/npm/jstransform@10.1.0/visitors/es6-call-spread-visitors.js +0 -72
- data/public/vendor/npm/jstransform@10.1.0/visitors/es6-class-visitors.js +0 -316
- data/public/vendor/npm/jstransform@10.1.0/visitors/es6-destructuring-visitors.js +0 -135
- data/public/vendor/npm/jstransform@10.1.0/visitors/es6-object-concise-method-visitors.js +0 -28
- data/public/vendor/npm/jstransform@10.1.0/visitors/es6-object-short-notation-visitors.js +0 -12
- data/public/vendor/npm/jstransform@10.1.0/visitors/es6-rest-param-visitors.js +0 -45
- data/public/vendor/npm/jstransform@10.1.0/visitors/es6-template-visitors.js +0 -90
- data/public/vendor/npm/jstransform@10.1.0/visitors/es7-rest-property-helpers.js +0 -80
- data/public/vendor/npm/jstransform@10.1.0/visitors/es7-spread-property-visitors.js +0 -56
- data/public/vendor/npm/jstransform@10.1.0/visitors/reserved-words-helper.js +0 -74
- data/public/vendor/npm/jstransform@10.1.0/visitors/reserved-words-visitors.js +0 -30
- data/public/vendor/npm/jstransform@10.1.0/visitors/type-syntax.js +0 -118
- data/public/vendor/npm/jstransform@10.1.0.js +0 -1
- data/public/vendor/npm/process@0.10.1/browser.js +0 -58
- data/public/vendor/npm/process@0.10.1.js +0 -1
- data/public/vendor/npm/qs@2.4.1/test/stringify.js +0 -162
- data/public/vendor/npm/react@0.13.3/README.md +0 -20
- data/public/vendor/npm/react@0.13.3/addons.js +0 -2
- data/public/vendor/npm/react@0.13.3/dist/JSXTransformer.js +0 -11346
- data/public/vendor/npm/react@0.13.3/dist/react-with-addons.js +0 -10483
- data/public/vendor/npm/react@0.13.3/dist/react-with-addons.min.js +0 -7297
- data/public/vendor/npm/react@0.13.3/dist/react.js +0 -9468
- data/public/vendor/npm/react@0.13.3/dist/react.min.js +0 -6764
- data/public/vendor/npm/react@0.13.3/lib/AutoFocusMixin.js +0 -9
- data/public/vendor/npm/react@0.13.3/lib/BeforeInputEventPlugin.js +0 -197
- data/public/vendor/npm/react@0.13.3/lib/CSSCore.js +0 -39
- data/public/vendor/npm/react@0.13.3/lib/CSSProperty.js +0 -123
- data/public/vendor/npm/react@0.13.3/lib/CSSPropertyOperations.js +0 -103
- data/public/vendor/npm/react@0.13.3/lib/CallbackQueue.js +0 -43
- data/public/vendor/npm/react@0.13.3/lib/ChangeEventPlugin.js +0 -174
- data/public/vendor/npm/react@0.13.3/lib/ClientReactRootIndex.js +0 -23
- data/public/vendor/npm/react@0.13.3/lib/DOMChildrenOperations.js +0 -57
- data/public/vendor/npm/react@0.13.3/lib/DOMProperty.js +0 -96
- data/public/vendor/npm/react@0.13.3/lib/DOMPropertyOperations.js +0 -99
- data/public/vendor/npm/react@0.13.3/lib/Danger.js +0 -67
- data/public/vendor/npm/react@0.13.3/lib/DefaultEventPluginOrder.js +0 -5
- data/public/vendor/npm/react@0.13.3/lib/EnterLeaveEventPlugin.js +0 -69
- data/public/vendor/npm/react@0.13.3/lib/EventConstants.js +0 -55
- data/public/vendor/npm/react@0.13.3/lib/EventListener.js +0 -34
- data/public/vendor/npm/react@0.13.3/lib/EventPluginHub.js +0 -103
- data/public/vendor/npm/react@0.13.3/lib/EventPluginRegistry.js +0 -115
- data/public/vendor/npm/react@0.13.3/lib/EventPluginUtils.js +0 -121
- data/public/vendor/npm/react@0.13.3/lib/EventPropagators.js +0 -62
- data/public/vendor/npm/react@0.13.3/lib/ExecutionEnvironment.js +0 -42
- data/public/vendor/npm/react@0.13.3/lib/FallbackCompositionState.js +0 -45
- data/public/vendor/npm/react@0.13.3/lib/HTMLDOMPropertyConfig.js +0 -155
- data/public/vendor/npm/react@0.13.3/lib/LinkedStateMixin.js +0 -8
- data/public/vendor/npm/react@0.13.3/lib/LinkedValueUtils.js +0 -74
- data/public/vendor/npm/react@0.13.3/lib/LocalEventTrapMixin.js +0 -26
- data/public/vendor/npm/react@0.13.3/lib/MobileSafariClickEventPlugin.js +0 -17
- data/public/vendor/npm/react@0.13.3/lib/Object.assign.js +0 -47
- data/public/vendor/npm/react@0.13.3/lib/PooledClass.js +0 -75
- data/public/vendor/npm/react@0.13.3/lib/React.js +0 -93
- data/public/vendor/npm/react@0.13.3/lib/ReactBrowserComponentMixin.js +0 -7
- data/public/vendor/npm/react@0.13.3/lib/ReactBrowserEventEmitter.js +0 -136
- data/public/vendor/npm/react@0.13.3/lib/ReactCSSTransitionGroup.js +0 -34
- data/public/vendor/npm/react@0.13.3/lib/ReactCSSTransitionGroupChild.js +0 -92
- data/public/vendor/npm/react@0.13.3/lib/ReactChildReconciler.js +0 -57
- data/public/vendor/npm/react@0.13.3/lib/ReactChildren.js +0 -67
- data/public/vendor/npm/react@0.13.3/lib/ReactClass.js +0 -338
- data/public/vendor/npm/react@0.13.3/lib/ReactComponent.js +0 -50
- data/public/vendor/npm/react@0.13.3/lib/ReactComponentBrowserEnvironment.js +0 -14
- data/public/vendor/npm/react@0.13.3/lib/ReactComponentEnvironment.js +0 -19
- data/public/vendor/npm/react@0.13.3/lib/ReactComponentWithPureRenderMixin.js +0 -7
- data/public/vendor/npm/react@0.13.3/lib/ReactCompositeComponent.js +0 -374
- data/public/vendor/npm/react@0.13.3/lib/ReactContext.js +0 -27
- data/public/vendor/npm/react@0.13.3/lib/ReactCurrentOwner.js +0 -32
- data/public/vendor/npm/react@0.13.3/lib/ReactDOM.js +0 -146
- data/public/vendor/npm/react@0.13.3/lib/ReactDOMButton.js +0 -35
- data/public/vendor/npm/react@0.13.3/lib/ReactDOMComponent.js +0 -267
- data/public/vendor/npm/react@0.13.3/lib/ReactDOMForm.js +0 -21
- data/public/vendor/npm/react@0.13.3/lib/ReactDOMIDOperations.js +0 -63
- data/public/vendor/npm/react@0.13.3/lib/ReactDOMIframe.js +0 -20
- data/public/vendor/npm/react@0.13.3/lib/ReactDOMImg.js +0 -21
- data/public/vendor/npm/react@0.13.3/lib/ReactDOMInput.js +0 -94
- data/public/vendor/npm/react@0.13.3/lib/ReactDOMOption.js +0 -23
- data/public/vendor/npm/react@0.13.3/lib/ReactDOMSelect.js +0 -112
- data/public/vendor/npm/react@0.13.3/lib/ReactDOMSelection.js +0 -103
- data/public/vendor/npm/react@0.13.3/lib/ReactDOMTextComponent.js +0 -38
- data/public/vendor/npm/react@0.13.3/lib/ReactDOMTextarea.js +0 -70
- data/public/vendor/npm/react@0.13.3/lib/ReactDefaultBatchingStrategy.js +0 -37
- data/public/vendor/npm/react@0.13.3/lib/ReactDefaultInjection.js +0 -93
- data/public/vendor/npm/react@0.13.3/lib/ReactDefaultPerf.js +0 -183
- data/public/vendor/npm/react@0.13.3/lib/ReactDefaultPerfAnalysis.js +0 -145
- data/public/vendor/npm/react@0.13.3/lib/ReactElement.js +0 -151
- data/public/vendor/npm/react@0.13.3/lib/ReactElementValidator.js +0 -218
- data/public/vendor/npm/react@0.13.3/lib/ReactEmptyComponent.js +0 -47
- data/public/vendor/npm/react@0.13.3/lib/ReactErrorUtils.js +0 -30
- data/public/vendor/npm/react@0.13.3/lib/ReactEventEmitterMixin.js +0 -12
- data/public/vendor/npm/react@0.13.3/lib/ReactEventListener.js +0 -93
- data/public/vendor/npm/react@0.13.3/lib/ReactFragment.js +0 -110
- data/public/vendor/npm/react@0.13.3/lib/ReactInjection.js +0 -27
- data/public/vendor/npm/react@0.13.3/lib/ReactInputSelection.js +0 -75
- data/public/vendor/npm/react@0.13.3/lib/ReactInstanceHandles.js +0 -113
- data/public/vendor/npm/react@0.13.3/lib/ReactInstanceMap.js +0 -47
- data/public/vendor/npm/react@0.13.3/lib/ReactLifeCycle.js +0 -9
- data/public/vendor/npm/react@0.13.3/lib/ReactLink.js +0 -16
- data/public/vendor/npm/react@0.13.3/lib/ReactMarkupChecksum.js +0 -17
- data/public/vendor/npm/react@0.13.3/lib/ReactMount.js +0 -347
- data/public/vendor/npm/react@0.13.3/lib/ReactMultiChild.js +0 -190
- data/public/vendor/npm/react@0.13.3/lib/ReactMultiChildUpdateTypes.js +0 -10
- data/public/vendor/npm/react@0.13.3/lib/ReactNativeComponent.js +0 -53
- data/public/vendor/npm/react@0.13.3/lib/ReactOwner.js +0 -21
- data/public/vendor/npm/react@0.13.3/lib/ReactPerf.js +0 -42
- data/public/vendor/npm/react@0.13.3/lib/ReactPropTransferer.js +0 -40
- data/public/vendor/npm/react@0.13.3/lib/ReactPropTypeLocationNames.js +0 -13
- data/public/vendor/npm/react@0.13.3/lib/ReactPropTypeLocations.js +0 -9
- data/public/vendor/npm/react@0.13.3/lib/ReactPropTypes.js +0 -225
- data/public/vendor/npm/react@0.13.3/lib/ReactPutListenerQueue.js +0 -31
- data/public/vendor/npm/react@0.13.3/lib/ReactReconcileTransaction.js +0 -66
- data/public/vendor/npm/react@0.13.3/lib/ReactReconciler.js +0 -44
- data/public/vendor/npm/react@0.13.3/lib/ReactRef.js +0 -36
- data/public/vendor/npm/react@0.13.3/lib/ReactRootIndex.js +0 -29
- data/public/vendor/npm/react@0.13.3/lib/ReactServerRendering.js +0 -44
- data/public/vendor/npm/react@0.13.3/lib/ReactServerRenderingTransaction.js +0 -47
- data/public/vendor/npm/react@0.13.3/lib/ReactStateSetters.js +0 -104
- data/public/vendor/npm/react@0.13.3/lib/ReactTestUtils.js +0 -249
- data/public/vendor/npm/react@0.13.3/lib/ReactTransitionChildMapping.js +0 -53
- data/public/vendor/npm/react@0.13.3/lib/ReactTransitionEvents.js +0 -68
- data/public/vendor/npm/react@0.13.3/lib/ReactTransitionGroup.js +0 -140
- data/public/vendor/npm/react@0.13.3/lib/ReactUpdateQueue.js +0 -107
- data/public/vendor/npm/react@0.13.3/lib/ReactUpdates.js +0 -139
- data/public/vendor/npm/react@0.13.3/lib/ReactWithAddons.js +0 -30
- data/public/vendor/npm/react@0.13.3/lib/SVGDOMPropertyConfig.js +0 -76
- data/public/vendor/npm/react@0.13.3/lib/SelectEventPlugin.js +0 -91
- data/public/vendor/npm/react@0.13.3/lib/ServerReactRootIndex.js +0 -29
- data/public/vendor/npm/react@0.13.3/lib/SimpleEventPlugin.js +0 -287
- data/public/vendor/npm/react@0.13.3/lib/SyntheticClipboardEvent.js +0 -11
- data/public/vendor/npm/react@0.13.3/lib/SyntheticCompositionEvent.js +0 -9
- data/public/vendor/npm/react@0.13.3/lib/SyntheticDragEvent.js +0 -9
- data/public/vendor/npm/react@0.13.3/lib/SyntheticEvent.js +0 -90
- data/public/vendor/npm/react@0.13.3/lib/SyntheticFocusEvent.js +0 -9
- data/public/vendor/npm/react@0.13.3/lib/SyntheticInputEvent.js +0 -9
- data/public/vendor/npm/react@0.13.3/lib/SyntheticKeyboardEvent.js +0 -43
- data/public/vendor/npm/react@0.13.3/lib/SyntheticMouseEvent.js +0 -38
- data/public/vendor/npm/react@0.13.3/lib/SyntheticTouchEvent.js +0 -19
- data/public/vendor/npm/react@0.13.3/lib/SyntheticUIEvent.js +0 -29
- data/public/vendor/npm/react@0.13.3/lib/SyntheticWheelEvent.js +0 -18
- data/public/vendor/npm/react@0.13.3/lib/Transaction.js +0 -90
- data/public/vendor/npm/react@0.13.3/lib/ViewportMetrics.js +0 -27
- data/public/vendor/npm/react@0.13.3/lib/accumulateInto.js +0 -26
- data/public/vendor/npm/react@0.13.3/lib/adler32.js +0 -32
- data/public/vendor/npm/react@0.13.3/lib/camelize.js +0 -30
- data/public/vendor/npm/react@0.13.3/lib/camelizeStyleName.js +0 -8
- data/public/vendor/npm/react@0.13.3/lib/cloneWithProps.js +0 -20
- data/public/vendor/npm/react@0.13.3/lib/containsNode.js +0 -20
- data/public/vendor/npm/react@0.13.3/lib/createArrayFromMixed.js +0 -15
- data/public/vendor/npm/react@0.13.3/lib/createFullPageComponent.js +0 -22
- data/public/vendor/npm/react@0.13.3/lib/createNodesFromMarkup.js +0 -39
- data/public/vendor/npm/react@0.13.3/lib/cx.js +0 -20
- data/public/vendor/npm/react@0.13.3/lib/dangerousStyleValue.js +0 -19
- data/public/vendor/npm/react@0.13.3/lib/emptyFunction.js +0 -32
- data/public/vendor/npm/react@0.13.3/lib/emptyObject.js +0 -9
- data/public/vendor/npm/react@0.13.3/lib/escapeTextContentForBrowser.js +0 -38
- data/public/vendor/npm/react@0.13.3/lib/findDOMNode.js +0 -31
- data/public/vendor/npm/react@0.13.3/lib/flattenChildren.js +0 -25
- data/public/vendor/npm/react@0.13.3/lib/focusNode.js +0 -27
- data/public/vendor/npm/react@0.13.3/lib/forEachAccumulated.js +0 -29
- data/public/vendor/npm/react@0.13.3/lib/getActiveElement.js +0 -27
- data/public/vendor/npm/react@0.13.3/lib/getEventCharCode.js +0 -50
- data/public/vendor/npm/react@0.13.3/lib/getEventKey.js +0 -72
- data/public/vendor/npm/react@0.13.3/lib/getEventModifierState.js +0 -45
- data/public/vendor/npm/react@0.13.3/lib/getEventTarget.js +0 -29
- data/public/vendor/npm/react@0.13.3/lib/getIteratorFn.js +0 -42
- data/public/vendor/npm/react@0.13.3/lib/getMarkupWrap.js +0 -73
- data/public/vendor/npm/react@0.13.3/lib/getNodeForCharacterOffset.js +0 -73
- data/public/vendor/npm/react@0.13.3/lib/getReactRootElementInContainer.js +0 -33
- data/public/vendor/npm/react@0.13.3/lib/getTextContentAccessor.js +0 -11
- data/public/vendor/npm/react@0.13.3/lib/getUnboundedScrollPosition.js +0 -38
- data/public/vendor/npm/react@0.13.3/lib/hyphenate.js +0 -31
- data/public/vendor/npm/react@0.13.3/lib/hyphenateStyleName.js +0 -8
- data/public/vendor/npm/react@0.13.3/lib/instantiateReactComponent.js +0 -55
- data/public/vendor/npm/react@0.13.3/lib/invariant.js +0 -26
- data/public/vendor/npm/react@0.13.3/lib/isEventSupported.js +0 -24
- data/public/vendor/npm/react@0.13.3/lib/isNode.js +0 -25
- data/public/vendor/npm/react@0.13.3/lib/isTextInputElement.js +0 -41
- data/public/vendor/npm/react@0.13.3/lib/isTextNode.js +0 -6
- data/public/vendor/npm/react@0.13.3/lib/joinClasses.js +0 -39
- data/public/vendor/npm/react@0.13.3/lib/keyMirror.js +0 -18
- data/public/vendor/npm/react@0.13.3/lib/keyOf.js +0 -34
- data/public/vendor/npm/react@0.13.3/lib/mapObject.js +0 -51
- data/public/vendor/npm/react@0.13.3/lib/memoizeStringOnly.js +0 -31
- data/public/vendor/npm/react@0.13.3/lib/onlyChild.js +0 -11
- data/public/vendor/npm/react@0.13.3/lib/performance.js +0 -8
- data/public/vendor/npm/react@0.13.3/lib/performanceNow.js +0 -7
- data/public/vendor/npm/react@0.13.3/lib/quoteAttributeValueForBrowser.js +0 -7
- data/public/vendor/npm/react@0.13.3/lib/setInnerHTML.js +0 -40
- data/public/vendor/npm/react@0.13.3/lib/setTextContent.js +0 -16
- data/public/vendor/npm/react@0.13.3/lib/shallowEqual.js +0 -42
- data/public/vendor/npm/react@0.13.3/lib/shouldUpdateReactComponent.js +0 -51
- data/public/vendor/npm/react@0.13.3/lib/toArray.js +0 -21
- data/public/vendor/npm/react@0.13.3/lib/traverseAllChildren.js +0 -104
- data/public/vendor/npm/react@0.13.3/lib/update.js +0 -78
- data/public/vendor/npm/react@0.13.3/lib/warning.js +0 -34
- data/public/vendor/npm/react@0.13.3/package.json +0 -34
- data/public/vendor/npm/react@0.13.3/react.js +0 -2
- data/public/vendor/npm/react@0.13.3.js +0 -1
- data/public/vendor/npm/readable-stream@1.1.13/duplex.js +0 -2
- data/public/vendor/npm/readable-stream@1.1.13/passthrough.js +0 -2
- data/public/vendor/npm/readable-stream@1.1.13/readable.js +0 -8
- data/public/vendor/npm/readable-stream@1.1.13/transform.js +0 -2
- data/public/vendor/npm/readable-stream@1.1.13/writable.js +0 -2
- data/public/vendor/npm/readable-stream@1.1.13.js +0 -1
- data/public/vendor/npm/source-map@0.1.31/CHANGELOG.md +0 -112
- data/public/vendor/npm/source-map@0.1.31/LICENSE +0 -28
- data/public/vendor/npm/source-map@0.1.31/Makefile.dryice.js +0 -89
- data/public/vendor/npm/source-map@0.1.31/README.md +0 -434
- data/public/vendor/npm/source-map@0.1.31/build/assert-shim.js +0 -58
- data/public/vendor/npm/source-map@0.1.31/build/mini-require.js +0 -154
- data/public/vendor/npm/source-map@0.1.31/build/prefix-source-map.jsm +0 -20
- data/public/vendor/npm/source-map@0.1.31/build/prefix-utils.jsm +0 -18
- data/public/vendor/npm/source-map@0.1.31/build/suffix-browser.js +0 -8
- data/public/vendor/npm/source-map@0.1.31/build/suffix-source-map.jsm +0 -6
- data/public/vendor/npm/source-map@0.1.31/build/suffix-utils.jsm +0 -21
- data/public/vendor/npm/source-map@0.1.31/build/test-prefix.js +0 -10
- data/public/vendor/npm/source-map@0.1.31/build/test-suffix.js +0 -5
- data/public/vendor/npm/source-map@0.1.31/lib/source-map/array-set.js +0 -49
- data/public/vendor/npm/source-map@0.1.31/lib/source-map/base64-vlq.js +0 -56
- data/public/vendor/npm/source-map@0.1.31/lib/source-map/base64.js +0 -44
- data/public/vendor/npm/source-map@0.1.31/lib/source-map/binary-search.js +0 -83
- data/public/vendor/npm/source-map@0.1.31/lib/source-map/source-map-consumer.js +0 -238
- data/public/vendor/npm/source-map@0.1.31/lib/source-map/source-map-generator.js +0 -231
- data/public/vendor/npm/source-map@0.1.31/lib/source-map/source-node.js +0 -234
- data/public/vendor/npm/source-map@0.1.31/lib/source-map/util.js +0 -207
- data/public/vendor/npm/source-map@0.1.31/lib/source-map.js +0 -4
- data/public/vendor/npm/source-map@0.1.31/package.json +0 -52
- data/public/vendor/npm/source-map@0.1.31/test/run-tests.js +0 -50
- data/public/vendor/npm/source-map@0.1.31/test/source-map/test-api.js +0 -19
- data/public/vendor/npm/source-map@0.1.31/test/source-map/test-array-set.js +0 -84
- data/public/vendor/npm/source-map@0.1.31/test/source-map/test-base64-vlq.js +0 -17
- data/public/vendor/npm/source-map@0.1.31/test/source-map/test-base64.js +0 -26
- data/public/vendor/npm/source-map@0.1.31/test/source-map/test-binary-search.js +0 -37
- data/public/vendor/npm/source-map@0.1.31/test/source-map/test-dog-fooding.js +0 -76
- data/public/vendor/npm/source-map@0.1.31/test/source-map/test-source-map-consumer.js +0 -426
- data/public/vendor/npm/source-map@0.1.31/test/source-map/test-source-map-generator.js +0 -480
- data/public/vendor/npm/source-map@0.1.31/test/source-map/test-source-node.js +0 -307
- data/public/vendor/npm/source-map@0.1.31/test/source-map/util.js +0 -84
- data/public/vendor/npm/source-map@0.1.31.js +0 -1
- data/public/vendor/npm/through@2.3.8/LICENSE.APACHE2 +0 -15
- data/public/vendor/npm/through@2.3.8/LICENSE.MIT +0 -24
- data/public/vendor/npm/through@2.3.8/index.js +0 -93
- data/public/vendor/npm/through@2.3.8/package.json +0 -36
- data/public/vendor/npm/through@2.3.8/readme.markdown +0 -64
- data/public/vendor/npm/through@2.3.8/test/async.js +0 -26
- data/public/vendor/npm/through@2.3.8/test/auto-destroy.js +0 -26
- data/public/vendor/npm/through@2.3.8/test/buffering.js +0 -57
- data/public/vendor/npm/through@2.3.8/test/end.js +0 -37
- data/public/vendor/npm/through@2.3.8/test/index.js +0 -98
- data/public/vendor/npm/through@2.3.8/test.js +0 -2
- data/public/vendor/npm/through@2.3.8.js +0 -1
- data/views/_options.erb +0 -156
- /data/public/vendor/github/jspm/{nodelibs-buffer@0.1.0 → nodelibs-buffer@0.1.1}/index.js +0 -0
- /data/public/vendor/github/jspm/{nodelibs-process@0.1.1 → nodelibs-process@0.1.2}/index.js +0 -0
- /data/public/vendor/npm/{readable-stream@1.1.13 → assert@1.5.0}/LICENSE +0 -0
- /data/public/vendor/npm/{buffer@3.4.3 → buffer@5.7.1}/LICENSE +0 -0
- /data/public/vendor/npm/{core-util-is@1.0.1 → core-util-is@1.0.3}/README.md +0 -0
- /data/public/vendor/npm/{process@0.10.1 → process@0.11.10}/LICENSE +0 -0
- /data/public/vendor/npm/{process@0.10.1 → process@0.11.10}/index.js +0 -0
- /data/public/vendor/npm/{readable-stream@1.1.13 → readable-stream@1.1.14}/README.md +0 -0
- /data/public/vendor/npm/{readable-stream@1.1.13 → readable-stream@1.1.14}/float.patch +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3cf703fae66ad96d285ed0556c387dabb0d69be120db5bdd3c3f9f8a03d3a814
|
4
|
+
data.tar.gz: 503bb0b69cbf773ab536d99f6782f4fff19f4872c49e6377d49a9f7820861c3b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1896b2afddf6033c98747f7eba1dabbe15b270940bd19760ebef4ed75af267760d45d40215663173ccb2f964472b458179a459316b86ef72bc26aa75d62faad0
|
7
|
+
data.tar.gz: 4ac1d9a5a205d299af4b1467521a9bc539e3833d0a571cfa90b490b19df958fc0f7ee2e1341e3d8d5e19fccbe2ee6874884fc7fbcbfbdc6abbe1e60df3c9a76e
|
@@ -1,8 +1,30 @@
|
|
1
1
|
module SequenceServer
|
2
|
+
Error = Class.new(StandardError)
|
3
|
+
|
4
|
+
# DatabaseUnreachableError is raised when the serialised Job object is
|
5
|
+
# refering to a database that is not present in the current filesystem.
|
6
|
+
class DatabaseUnreachableError < Error
|
7
|
+
attr_reader :more_info
|
8
|
+
|
9
|
+
def initialize(more_info)
|
10
|
+
super
|
11
|
+
@more_info = more_info
|
12
|
+
end
|
13
|
+
|
14
|
+
def title
|
15
|
+
'Sequence database unreachable'
|
16
|
+
end
|
17
|
+
|
18
|
+
def message
|
19
|
+
"The action you're trying to perform is not possible because \
|
20
|
+
the database is unreachable. This can happen if the database has \
|
21
|
+
been deleted or you are performing an action on an imported job."
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
2
25
|
# API errors have an http status, title, message, and additional information
|
3
26
|
# like stacktrace or information from program output.
|
4
|
-
|
5
|
-
end
|
27
|
+
APIError = Class.new(Error)
|
6
28
|
|
7
29
|
# Job not found (404).
|
8
30
|
class NotFound < APIError
|
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'sequenceserver/job'
|
2
|
+
require 'sequenceserver/zip_file_generator'
|
2
3
|
|
3
4
|
module SequenceServer
|
4
5
|
# BLAST module.
|
@@ -24,13 +25,18 @@ module SequenceServer
|
|
24
25
|
@databases = Database[params[:databases]]
|
25
26
|
@advanced = params[:advanced].to_s.strip
|
26
27
|
@options = @advanced + defaults
|
28
|
+
# The following params are for analytics only
|
29
|
+
@num_threads = config[:num_threads]
|
30
|
+
@query_length = calculate_query_size
|
31
|
+
@databases_ncharacters_total = calculate_databases_ncharacters_total
|
27
32
|
end
|
28
33
|
end
|
29
34
|
end
|
30
35
|
|
31
36
|
# :nodoc:
|
32
37
|
# Attributes used by us - should be considered private.
|
33
|
-
attr_reader :
|
38
|
+
attr_reader :advanced
|
39
|
+
attr_reader :databases, :databases_ncharacters_total, :method, :num_threads, :options, :qfile, :query_length
|
34
40
|
|
35
41
|
# :nodoc:
|
36
42
|
# Deprecated; see Report#extract_params
|
@@ -53,7 +59,6 @@ module SequenceServer
|
|
53
59
|
# Override Job#raise! to raise specific API errors based on exitstatus
|
54
60
|
# and using contents of stderr to provide context about the error.
|
55
61
|
#
|
56
|
-
# rubocop:disable Metrics/CyclomaticComplexity
|
57
62
|
def raise!
|
58
63
|
# Return true exit status is 0 and stdout is not empty.
|
59
64
|
return true if exitstatus.zero? && !File.zero?(stdout)
|
@@ -92,10 +97,38 @@ module SequenceServer
|
|
92
97
|
MSG
|
93
98
|
end
|
94
99
|
end
|
95
|
-
|
100
|
+
|
101
|
+
# Use it with a block to get a self-cleaning temporary archive file
|
102
|
+
# of the contents of the job directory.
|
103
|
+
# job.as_archived_file do |tmp_file|
|
104
|
+
# # do things with tmp_file
|
105
|
+
# end
|
106
|
+
def as_archived_file(&block)
|
107
|
+
Dir.mktmpdir(id.to_s) do |tmp_dir|
|
108
|
+
file_path = "#{tmp_dir}/#{id}.zip"
|
109
|
+
ZipFileGenerator.new(dir, file_path).write
|
110
|
+
File.open(file_path, 'r') do |file|
|
111
|
+
block.call(file)
|
112
|
+
end
|
113
|
+
end
|
114
|
+
end
|
96
115
|
|
97
116
|
private
|
98
117
|
|
118
|
+
def calculate_databases_ncharacters_total
|
119
|
+
databases.map(&:ncharacters).map(&:to_i).reduce(:+)
|
120
|
+
end
|
121
|
+
|
122
|
+
def calculate_query_size
|
123
|
+
size = 0
|
124
|
+
IO.foreach(@qfile) do |line|
|
125
|
+
next if line[0] == '>'
|
126
|
+
|
127
|
+
size += line.gsub(/\s+/, '').length
|
128
|
+
end
|
129
|
+
size
|
130
|
+
end
|
131
|
+
|
99
132
|
def validate(params)
|
100
133
|
validate_method params[:method]
|
101
134
|
validate_sequences params[:sequence]
|
@@ -109,12 +142,14 @@ module SequenceServer
|
|
109
142
|
|
110
143
|
def validate_method(method)
|
111
144
|
return true if ALGORITHMS.include? method
|
145
|
+
|
112
146
|
fail InputError, 'BLAST algorithm should be one of:' \
|
113
147
|
" #{ALGORITHMS.join(', ')}."
|
114
148
|
end
|
115
149
|
|
116
150
|
def validate_sequences(sequences)
|
117
151
|
return true if sequences.is_a?(String) && !sequences.empty?
|
152
|
+
|
118
153
|
fail InputError, 'Sequences should be a non-empty string.'
|
119
154
|
end
|
120
155
|
|
@@ -122,6 +157,7 @@ module SequenceServer
|
|
122
157
|
ids = Database.ids
|
123
158
|
return true if database_ids.is_a?(Array) && !database_ids.empty? &&
|
124
159
|
(ids & database_ids).length == database_ids.length
|
160
|
+
|
125
161
|
fail InputError, "Database id should be one of: #{ids.join("\n")}."
|
126
162
|
end
|
127
163
|
|
@@ -133,9 +169,7 @@ module SequenceServer
|
|
133
169
|
return true if !options || (options.is_a?(String) &&
|
134
170
|
options.strip.empty?)
|
135
171
|
|
136
|
-
unless allowed_chars.match(options)
|
137
|
-
fail InputError, 'Invalid characters detected in options.'
|
138
|
-
end
|
172
|
+
fail InputError, 'Invalid characters detected in options.' unless allowed_chars.match(options)
|
139
173
|
|
140
174
|
if disallowed_options.match(options)
|
141
175
|
failedopt = Regexp.last_match[0]
|
@@ -146,7 +180,7 @@ module SequenceServer
|
|
146
180
|
end
|
147
181
|
|
148
182
|
def allowed_chars
|
149
|
-
/\A[a-z0-9\-_
|
183
|
+
/\A[a-z0-9\-_. ',]*\Z/i
|
150
184
|
end
|
151
185
|
|
152
186
|
def disallowed_options
|
@@ -35,16 +35,17 @@ module SequenceServer
|
|
35
35
|
# Attributes parsed from job metadata and BLAST output.
|
36
36
|
attr_reader :querydb, :dbtype, :params
|
37
37
|
|
38
|
-
def to_json
|
39
|
-
[
|
40
|
-
|
38
|
+
def to_json(*_args)
|
39
|
+
%i[querydb program program_version params stats
|
40
|
+
queries].inject({}) do |h, k|
|
41
41
|
h[k] = send(k)
|
42
42
|
h
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
43
|
+
end.update(search_id: job.id,
|
44
|
+
submitted_at: job.submitted_at.utc,
|
45
|
+
imported_xml: !job.imported_xml_file.nil?,
|
46
|
+
seqserv_version: SequenceServer::VERSION,
|
47
|
+
cloud_sharing_enabled: SequenceServer.config[:cloud_share_url].start_with?('http'),
|
48
|
+
non_parse_seqids: !!job.databases&.any?(&:non_parse_seqids?)).to_json
|
48
49
|
end
|
49
50
|
|
50
51
|
private
|
@@ -56,9 +57,9 @@ module SequenceServer
|
|
56
57
|
tsv_ir = nil
|
57
58
|
if job.imported_xml_file
|
58
59
|
xml_ir = parse_xml File.read(job.imported_xml_file)
|
59
|
-
tsv_ir = Hash.new do |h1,k1|
|
60
|
-
h1[k1] = Hash.new do |h2,k2|
|
61
|
-
h2[k2]=['','',[]]
|
60
|
+
tsv_ir = Hash.new do |h1, k1|
|
61
|
+
h1[k1] = Hash.new do |h2, k2|
|
62
|
+
h2[k2] = ['', '', []]
|
62
63
|
end
|
63
64
|
end
|
64
65
|
else
|
@@ -122,13 +123,13 @@ module SequenceServer
|
|
122
123
|
def extract_stats(ir)
|
123
124
|
stats = ir[8].first[5][0]
|
124
125
|
@stats = {
|
125
|
-
nsequences:
|
126
|
-
ncharacters:
|
127
|
-
hsp_length:
|
126
|
+
nsequences: stats[0],
|
127
|
+
ncharacters: stats[1],
|
128
|
+
hsp_length: stats[2],
|
128
129
|
search_space: stats[3],
|
129
|
-
kappa:
|
130
|
-
labmda:
|
131
|
-
entropy:
|
130
|
+
kappa: stats[4],
|
131
|
+
labmda: stats[5],
|
132
|
+
entropy: stats[6]
|
132
133
|
}
|
133
134
|
end
|
134
135
|
|
@@ -144,6 +145,7 @@ module SequenceServer
|
|
144
145
|
# Create Hit objects for the given query from the given ir.
|
145
146
|
def extract_hits(xml_ir, tsv_ir, query)
|
146
147
|
return if xml_ir == ["\n"] # => No hits.
|
148
|
+
|
147
149
|
xml_ir.each do |n|
|
148
150
|
# If hit comes from a non -parse_seqids database, then id (n[1]) is a
|
149
151
|
# BLAST assigned internal id of the format 'gnl|BL_ORD_ID|serial'. We
|
@@ -169,7 +171,7 @@ module SequenceServer
|
|
169
171
|
def extract_hsps(xml_ir, tsv_ir, hit)
|
170
172
|
xml_ir.each_with_index do |n, i|
|
171
173
|
n.insert(14, tsv_ir[i])
|
172
|
-
hsp = HSP.new(
|
174
|
+
hsp = HSP.new(hit, *n)
|
173
175
|
hit.hsps << hsp
|
174
176
|
end
|
175
177
|
end
|
@@ -177,8 +179,9 @@ module SequenceServer
|
|
177
179
|
def parse_xml(xml)
|
178
180
|
node_to_array Ox.parse(xml).root
|
179
181
|
rescue Ox::ParseError
|
180
|
-
|
181
|
-
|
182
|
+
raise 'Error parsing XML file' if job.imported_xml_file
|
183
|
+
|
184
|
+
raise InputError, <<~MSG
|
182
185
|
BLAST generated incorrect XML output. This can happen if sequence ids in your
|
183
186
|
databases are not unique across all files. As a temporary workaround, you can
|
184
187
|
repeat the search with one database at a time. Proper fix is to recreate the
|
@@ -231,9 +234,12 @@ module SequenceServer
|
|
231
234
|
# ...
|
232
235
|
# }
|
233
236
|
def parse_tsv(tsv)
|
234
|
-
ir = Hash.new {|h, k| h[k] = {} }
|
237
|
+
ir = Hash.new { |h, k| h[k] = {} }
|
235
238
|
tsv.each_line do |line|
|
236
|
-
next if line.start_with? '#'
|
239
|
+
next if line.start_with? '#'
|
240
|
+
|
241
|
+
row = line.chomp.split("\t")
|
242
|
+
|
237
243
|
(ir[row[0]][row[1]] ||= [row[2], row[3], []])[2] << row[4]
|
238
244
|
end
|
239
245
|
ir
|
@@ -246,14 +252,14 @@ module SequenceServer
|
|
246
252
|
|
247
253
|
param_list.each_with_index do |word, i|
|
248
254
|
nxt = param_list[i + 1]
|
249
|
-
|
250
|
-
|
251
|
-
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
255
|
+
next unless word.start_with? '-'
|
256
|
+
|
257
|
+
word.sub!('-', '')
|
258
|
+
res[word] = unless nxt.nil? || nxt.start_with?('-')
|
259
|
+
nxt
|
260
|
+
else
|
261
|
+
'True'
|
262
|
+
end
|
257
263
|
end
|
258
264
|
res
|
259
265
|
end
|
@@ -11,12 +11,19 @@ module SequenceServer
|
|
11
11
|
|
12
12
|
def initialize(data = {})
|
13
13
|
@data = normalize data
|
14
|
+
|
14
15
|
@config_file = @data.delete(:config_file)
|
15
16
|
if @config_file
|
16
17
|
@config_file = File.expand_path(@config_file)
|
17
|
-
@data = parse_config_file.
|
18
|
+
@data = parse_config_file.deep_merge @data
|
18
19
|
end
|
19
|
-
|
20
|
+
|
21
|
+
@data = defaults.deep_merge @data
|
22
|
+
|
23
|
+
return unless @upgraded
|
24
|
+
|
25
|
+
logger.info 'You are using old configuration syntax. ' \
|
26
|
+
'Run `sequenceserver -s` to update your config file syntax.'
|
20
27
|
end
|
21
28
|
|
22
29
|
attr_reader :data, :config_file
|
@@ -39,6 +46,7 @@ module SequenceServer
|
|
39
46
|
# Write config data to config file.
|
40
47
|
def write_config_file
|
41
48
|
return unless config_file
|
49
|
+
|
42
50
|
File.open(config_file, 'w') do |f|
|
43
51
|
f.puts(data.delete_if { |_, v| v.nil? }.to_yaml)
|
44
52
|
end
|
@@ -46,32 +54,34 @@ module SequenceServer
|
|
46
54
|
|
47
55
|
private
|
48
56
|
|
49
|
-
# Symbolizes keys.
|
57
|
+
# Symbolizes keys. Rename/reformat key-values.
|
50
58
|
def normalize(data)
|
51
59
|
return {} unless data
|
52
60
|
|
53
61
|
# Symbolize keys.
|
54
|
-
data =
|
62
|
+
data = data.transform_keys(&:to_sym)
|
55
63
|
|
56
|
-
#
|
57
|
-
#
|
64
|
+
# Very old config files may have a key called `database`.
|
65
|
+
# Rename it to `database_dir`
|
58
66
|
if data[:database]
|
59
67
|
database_dir = data.delete(:database)
|
60
68
|
data[:database_dir] ||= database_dir
|
69
|
+
@upgrade = true
|
61
70
|
end
|
62
71
|
|
63
|
-
#
|
64
|
-
#
|
65
|
-
#
|
66
|
-
#
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
72
|
+
# Old config files may have an options hash with array values. We turn the
|
73
|
+
# array values into a hash. The logic is simple: If the array value is the
|
74
|
+
# same as default, we give it the key 'default', otherwise we give it the
|
75
|
+
# key 'custom'
|
76
|
+
data[:options]&.each do |key, val|
|
77
|
+
next if val.is_a? Hash
|
78
|
+
|
79
|
+
data[:options][key] = if val == defaults[:options][key][:default]
|
80
|
+
{ default: val }
|
81
|
+
else
|
82
|
+
{ custom: val }
|
83
|
+
end
|
84
|
+
@upgraded = true
|
75
85
|
end
|
76
86
|
|
77
87
|
data
|
@@ -86,8 +96,8 @@ module SequenceServer
|
|
86
96
|
end
|
87
97
|
logger.info "Reading configuration file: #{config_file}."
|
88
98
|
normalize YAML.load_file(config_file)
|
89
|
-
rescue =>
|
90
|
-
raise CONFIG_FILE_ERROR.new(config_file,
|
99
|
+
rescue StandardError => e
|
100
|
+
raise CONFIG_FILE_ERROR.new(config_file, e)
|
91
101
|
end
|
92
102
|
|
93
103
|
def file?(file)
|
@@ -96,20 +106,32 @@ module SequenceServer
|
|
96
106
|
|
97
107
|
# Default configuration data.
|
98
108
|
def defaults
|
99
|
-
{
|
109
|
+
@defaults ||= {
|
100
110
|
host: '0.0.0.0',
|
101
111
|
port: 4567,
|
102
112
|
databases_widget: 'classic',
|
103
113
|
options: {
|
104
|
-
blastn:
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
114
|
+
blastn: {
|
115
|
+
default: ['-task blastn', '-evalue 1e-5']
|
116
|
+
},
|
117
|
+
blastp: {
|
118
|
+
default: ['-evalue 1e-5']
|
119
|
+
},
|
120
|
+
blastx: {
|
121
|
+
default: ['-evalue 1e-5']
|
122
|
+
},
|
123
|
+
tblastx: {
|
124
|
+
default: ['-evalue 1e-5']
|
125
|
+
},
|
126
|
+
tblastn: {
|
127
|
+
default: ['-evalue 1e-5']
|
128
|
+
}
|
109
129
|
},
|
110
130
|
num_threads: 1,
|
111
131
|
num_jobs: 1,
|
112
|
-
job_lifetime:
|
132
|
+
job_lifetime: 43_200,
|
133
|
+
# Set cloud_share_url to 'disabled' to disable the cloud sharing feature
|
134
|
+
cloud_share_url: 'https://share.sequenceserver.com/api/v1/shared-job'
|
113
135
|
}
|
114
136
|
end
|
115
137
|
end
|
data/lib/sequenceserver/job.rb
CHANGED
@@ -25,15 +25,19 @@ module SequenceServer
|
|
25
25
|
# Creates and queues a job. Returns created job object.
|
26
26
|
def create(params)
|
27
27
|
job = BLAST::Job.new(params) # TODO: Dynamic dispatch.
|
28
|
-
|
29
|
-
job
|
28
|
+
enqueue(job)
|
30
29
|
end
|
31
30
|
|
32
31
|
# Fetches job with the given id.
|
33
32
|
def fetch(id)
|
34
33
|
job_file = File.join(DOTDIR, id, 'job.yaml')
|
35
34
|
fail NotFound unless File.exist?(job_file)
|
36
|
-
|
35
|
+
if RUBY_VERSION < '3.1.0'
|
36
|
+
YAML.load_file(job_file)
|
37
|
+
else
|
38
|
+
YAML.load_file(job_file, permitted_classes: [Time, Symbol, SequenceServer::BLAST::Job, \
|
39
|
+
SequenceServer::Database, SequenceServer::Job])
|
40
|
+
end
|
37
41
|
end
|
38
42
|
|
39
43
|
# Deletes job with the given id.
|
@@ -47,6 +51,12 @@ module SequenceServer
|
|
47
51
|
.map { |f| fetch File.basename File.dirname f }
|
48
52
|
end
|
49
53
|
|
54
|
+
# Enqueues a job that is already created, returns the job object
|
55
|
+
def enqueue(job)
|
56
|
+
pool.queue { job.run }
|
57
|
+
job
|
58
|
+
end
|
59
|
+
|
50
60
|
private
|
51
61
|
|
52
62
|
# Thread pool used for running BLAST searches.
|
@@ -1,18 +1,18 @@
|
|
1
1
|
require 'sequenceserver/job'
|
2
2
|
|
3
3
|
module SequenceServer
|
4
|
-
|
5
4
|
# Removes expired jobs in a background thread.
|
6
5
|
#
|
7
6
|
# Job lifetime is provided in minutes. It can be zero in which case jobs will
|
8
7
|
# be deleted as soon as they are done, or it can be Infinity in which case
|
9
8
|
# jobs will never be deleted. Default is to delete finished jobs after 7 days.
|
10
9
|
class JobRemover
|
11
|
-
DEFAULT_JOB_LIFETIME =
|
10
|
+
DEFAULT_JOB_LIFETIME = 43_200 # minutes (i.e., 30 days)
|
12
11
|
|
13
12
|
def initialize(job_lifetime)
|
14
13
|
@job_lifetime = job_lifetime || DEFAULT_JOB_LIFETIME
|
15
|
-
return if @job_lifetime == Float::INFINITY
|
14
|
+
return if @job_lifetime == 'Infinity' || @job_lifetime == Float::INFINITY
|
15
|
+
|
16
16
|
@job_lifetime = Integer(@job_lifetime) * 60
|
17
17
|
spawn_cleanup
|
18
18
|
end
|
@@ -25,34 +25,30 @@ module SequenceServer
|
|
25
25
|
def spawn_cleanup
|
26
26
|
Thread.new do
|
27
27
|
loop do
|
28
|
-
|
29
|
-
|
30
|
-
finished_jobs = Job.all.select { |f| f.done? }
|
31
|
-
|
32
|
-
# Cleanup finished jobs that have lived a lifetime.
|
33
|
-
expired_jobs = finished_jobs.select do |job|
|
34
|
-
(job.completed_at + @job_lifetime) <= now
|
35
|
-
end
|
36
|
-
expired_jobs.each { |job| Job.delete job.id }
|
37
|
-
unless expired_jobs.empty?
|
38
|
-
logger.info "#{logid}: deleted #{expired_jobs.count} old jobs."
|
39
|
-
end
|
40
|
-
|
41
|
-
# Decide when to cleanup next.
|
42
|
-
remaining_jobs = finished_jobs - expired_jobs
|
43
|
-
oldest_time = remaining_jobs.map(&:completed_at).min
|
44
|
-
if oldest_time && now < (oldest_time + @job_lifetime)
|
45
|
-
@next_cleanup = (oldest_time + @job_lifetime) - now
|
46
|
-
else
|
47
|
-
@next_cleanup = @job_lifetime
|
48
|
-
end
|
28
|
+
now = Time.now
|
29
|
+
finished_jobs = Job.all.select(&:done?)
|
49
30
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
logger.fatal("#{logid}: #{e.inspect}\n#{e.backtrace.join("\n")}")
|
54
|
-
Thread.exit
|
31
|
+
# Cleanup finished jobs that have lived a lifetime.
|
32
|
+
expired_jobs = finished_jobs.select do |job|
|
33
|
+
(job.completed_at + @job_lifetime) <= now
|
55
34
|
end
|
35
|
+
expired_jobs.each { |job| Job.delete job.id }
|
36
|
+
logger.info "#{logid}: deleted #{expired_jobs.count} old jobs." unless expired_jobs.empty?
|
37
|
+
|
38
|
+
# Decide when to cleanup next.
|
39
|
+
remaining_jobs = finished_jobs - expired_jobs
|
40
|
+
oldest_time = remaining_jobs.map(&:completed_at).min
|
41
|
+
@next_cleanup = if oldest_time && now < (oldest_time + @job_lifetime)
|
42
|
+
(oldest_time + @job_lifetime) - now
|
43
|
+
else
|
44
|
+
@job_lifetime
|
45
|
+
end
|
46
|
+
|
47
|
+
# Sleep till next cleanup.
|
48
|
+
sleep @next_cleanup.ceil
|
49
|
+
rescue StandardError => e
|
50
|
+
logger.fatal("#{logid}: #{e.inspect}\n#{e.backtrace.join("\n")}")
|
51
|
+
Thread.exit
|
56
52
|
end
|
57
53
|
end
|
58
54
|
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
require 'json'
|
2
2
|
require 'tilt/erb'
|
3
3
|
require 'sinatra/base'
|
4
|
+
require 'rest-client'
|
4
5
|
|
5
6
|
require 'sequenceserver/job'
|
6
7
|
require 'sequenceserver/blast'
|
@@ -79,9 +80,7 @@ module SequenceServer
|
|
79
80
|
options: SequenceServer.config[:options]
|
80
81
|
}
|
81
82
|
|
82
|
-
if SequenceServer.config[:databases_widget] == 'tree'
|
83
|
-
searchdata.update(tree: Database.tree)
|
84
|
-
end
|
83
|
+
searchdata.update(tree: Database.tree) if SequenceServer.config[:databases_widget] == 'tree'
|
85
84
|
|
86
85
|
# If a job_id is specified, update searchdata from job meta data (i.e.,
|
87
86
|
# query, pre-selected databases, advanced options used). Query is only
|
@@ -138,7 +137,7 @@ module SequenceServer
|
|
138
137
|
database_ids = params['database_ids'].split(',')
|
139
138
|
sequences = Sequence::Retriever.new(sequence_ids, database_ids, true)
|
140
139
|
send_file(sequences.file.path,
|
141
|
-
type:
|
140
|
+
type: sequences.mime,
|
142
141
|
filename: sequences.filename)
|
143
142
|
end
|
144
143
|
|
@@ -149,6 +148,57 @@ module SequenceServer
|
|
149
148
|
send_file out.file, filename: out.filename, type: out.mime
|
150
149
|
end
|
151
150
|
|
151
|
+
post '/cloud_share' do
|
152
|
+
content_type :json
|
153
|
+
request_params = JSON.parse(request.body.read)
|
154
|
+
job = Job.fetch(request_params['job_id'])
|
155
|
+
|
156
|
+
unless job.done?
|
157
|
+
status 422
|
158
|
+
{ errors: ["Job #{request_params['job_id']} is not finished yet."] }.to_json
|
159
|
+
end
|
160
|
+
|
161
|
+
unless SequenceServer.config[:cloud_share_url]
|
162
|
+
status 503
|
163
|
+
{ errors: ['Sorry, cloud sharing is not enabled on this server.'] }.to_json
|
164
|
+
end
|
165
|
+
|
166
|
+
begin
|
167
|
+
job.as_archived_file do |archived_job_file|
|
168
|
+
cloud_share_response = RestClient.post(
|
169
|
+
SequenceServer.config[:cloud_share_url],
|
170
|
+
{
|
171
|
+
shared_job: {
|
172
|
+
sender: {
|
173
|
+
email: request_params['sender_email']
|
174
|
+
},
|
175
|
+
archived_job_file: archived_job_file,
|
176
|
+
original_job_id: job.id
|
177
|
+
}
|
178
|
+
}
|
179
|
+
)
|
180
|
+
|
181
|
+
return cloud_share_response.body
|
182
|
+
end
|
183
|
+
rescue RestClient::ExceptionWithResponse => e
|
184
|
+
cloud_share_response = e.response
|
185
|
+
|
186
|
+
case cloud_share_response.code
|
187
|
+
when 413
|
188
|
+
halt 413,
|
189
|
+
{ errors: ['Sorry, the results are too large to share, please consider \
|
190
|
+
using https://sequenceserver.com/cloud'] }.to_json
|
191
|
+
when 422
|
192
|
+
halt 422, JSON.parse(cloud_share_response.body).to_json
|
193
|
+
else
|
194
|
+
error cloud_share_response.code,
|
195
|
+
{ errors: ["Unexpected Cloudshare response: #{cloud_share_response.code}"] }.to_json
|
196
|
+
end
|
197
|
+
rescue Errno::ECONNREFUSED
|
198
|
+
error 503, { errors: ['Sorry, the cloud sharing server may not be running. Try again later.'] }.to_json
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
152
202
|
# Catches any exception raised within the app and returns JSON
|
153
203
|
# representation of the error:
|
154
204
|
# {
|
@@ -173,6 +223,7 @@ module SequenceServer
|
|
173
223
|
# more_info.
|
174
224
|
error 400..500 do
|
175
225
|
error = env['sinatra.error']
|
226
|
+
return unless error
|
176
227
|
|
177
228
|
# All errors will have a message.
|
178
229
|
error_data = { message: error.message }
|
@@ -193,7 +244,13 @@ module SequenceServer
|
|
193
244
|
error_data[:more_info] = error.backtrace.join("\n")
|
194
245
|
end
|
195
246
|
|
196
|
-
|
247
|
+
if request.env['HTTP_ACCEPT'].to_s.include?('application/json')
|
248
|
+
content_type :json
|
249
|
+
error_data.to_json
|
250
|
+
else
|
251
|
+
content_type :html
|
252
|
+
erb :error, locals: { error_data: error_data }, layout: true
|
253
|
+
end
|
197
254
|
end
|
198
255
|
|
199
256
|
# Get the query sequences, selected databases, and advanced params used.
|
@@ -202,7 +259,7 @@ module SequenceServer
|
|
202
259
|
return if job.imported_xml_file
|
203
260
|
|
204
261
|
# Only read job.qfile if we are not going to use Database.retrieve.
|
205
|
-
searchdata[:query] = File.read(job.qfile)
|
262
|
+
searchdata[:query] = File.read(job.qfile) unless params[:query]
|
206
263
|
|
207
264
|
# Which databases to pre-select.
|
208
265
|
searchdata[:preSelectedDbs] = job.databases
|
@@ -213,7 +270,12 @@ module SequenceServer
|
|
213
270
|
# default advanced parameters from the advanced params input field. In
|
214
271
|
# this case, we do want the advanced params input field to be empty when
|
215
272
|
# the user hits the back button. Thus we do not test for empty string.
|
216
|
-
|
273
|
+
method = job.method.to_sym
|
274
|
+
if job.advanced && job.advanced !=
|
275
|
+
searchdata[:options][method][:default].join(' ')
|
276
|
+
searchdata[:options] = searchdata[:options].deep_copy
|
277
|
+
searchdata[:options][method]['last search'] = [job.advanced]
|
278
|
+
end
|
217
279
|
end
|
218
280
|
end
|
219
281
|
end
|