Commit Graph
375 Commits
Author SHA1 Message Date
John Chilton cdbae706e6 Respect auto_decompress in fetch API, synchronize upload APIs. 2018-05-15 07:39:14 -04:00
John Chilton b4de30b5fc Small fixes for upload flags (auto_decompress, check_content, space_to_tab). 2018-05-15 06:28:54 -04:00
John Chilton 8a58711e39 Remove validate_mode prop for sniffing, no longer needed with previous fixes.
This does undo an attempt that Nate made to auto sniff fastq.gz files when they can't be converted anyway, but that was kind of broken in its own way.

From Gitter:

jmchilton: natefoo "# Link mode can't decompress anyway, so enable sniffing for keep-compressed datatypes even when auto_decompress is enabled" Did you test this hack? I get the thought process but it seems like it results in uploaded fastq.gz files defaulting to fastqcssanger.gz? Maybe it didn't at some point though?

Nate Coraor: ummmmmmmmmmmm maybe probably not

John Chilton: I have four fixes for compressed datatypes that all fall apart because of this hack... can I just use the configured sniff order or do you want me to try to preserve this and write a test case

Nate Coraor: nah go ahead and de-hack

John Chilton: There is a good argument to be made for making the behavior more consistent anyway right? Cool thanks
2018-05-10 18:35:31 -04:00
mvdbeek 2e18ed2c97 Set ext explicitly to dataset.file_type
since it is being used again later. Thanks @nsoranzo!
2018-04-19 10:40:17 +02:00
mvdbeek 6c020a6dbc Fix uploads of link-only datasets to data library
`ext` was never being set in the case of link only datasets, where I think the
right thing is to fall back on `dataset.file_type`.
Fixes https://github.com/galaxyproject/galaxy/issues/5915.
2018-04-19 10:40:17 +02:00
Nicola Soranzo 6e36af5c0e Fix linking option for library dataset uploads
Broken in commit a45cbfeb8d .

Found by BioBlend tests:
https://travis-ci.org/galaxyproject/bioblend/jobs/356761960
2018-03-22 10:36:58 +00:00
Nate Coraor 11917108f3 Improve extension stripping 2018-03-16 16:33:39 -04:00
Nate Coraor 0163a57f0e Additional fixes for failing tests 2018-03-15 16:56:41 -04:00
Nate Coraor ef6f7f62ab Memory usage bug fixes and code cleanup/simplification for upload tool 2018-03-15 14:32:02 -04:00
John Chilton 495d1258fd Consistent sniffing regardless of in_place.
Previously sniffing would happen on the original file (before carriage returns and tabular spaces were converted) if in_place was false and on the converted file if it was true.
2018-03-08 10:33:42 -05:00
John Chilton 1c6cc02415 Hierarchical upload API optimized for folders & collections.
Allows describing hierarchical data in JSON or inferring structure from archives or directories.

Datasets or archive sources can be specified via uploads, URLs, paths (if admin && allow_path_paste), library_import_dir/user_library_import_dir, and/or FTP imports. Unlike existing API endpoints, a mix of these on a per file basis is allowed and they work seemlessly between libraries and histories.

Supported "archives" include gzip, zip, bagit directories, bagit achives (with fetching and validations of downloads).

The existing upload API endpoint is quite rough to work with both in terms of adding parameters (e.g. the file type and dbkey hanlding in 4563 was difficult to implement, terribly hacky, and should seemingly have been trivial) and in terms of building requests (one needs to build a tool form - not describe sensible inputs in JSON). This API is built to be intelligable from an API standpoint instead of being constrained to the older style tool form. Additionally it built with hierarchical data in mind in a way that would not be easy at all enhancing the tool form components we don't even render.

This implements 5159 though much simpler YAML descriptions of data libraries should be possible basically as the API descriptions. We can replace the data library script in Ephemeris https://github.com/galaxyproject/ephemeris/blob/master/ephemeris/setup_data_libraries.py with one that converts a simple YAML file into an API call and allows many new options for free.

In future PRs I'll add filtering options to this and it will serve as the backend to 4733.
2018-03-08 10:33:36 -05:00
John Chilton a45cbfeb8d Stronger assertion about link_data_only option in upload.py. 2018-03-08 10:32:19 -05:00
John Chilton ebac0fd9e5 Upload simplification - just base this check on link_only. 2018-03-08 10:32:19 -05:00
John Chilton d9d8f5d327 Eliminate precreated datasets concept in upload API.
Was used by the async controller in the past I think (https://github.com/galaxyproject/galaxy/blob/v13.01/lib/galaxy/webapps/galaxy/controllers/tool_runner.py#L256), but doesn't seem to be used now.
2018-02-26 11:00:05 -05:00
Nicola Soranzo 75b0618705 Do not remove external path files during library uploads
xref. https://github.com/galaxyproject/galaxy/pull/5264#issuecomment-367172820
2018-02-21 16:02:36 +00:00
Nicola Soranzo b59fb06fd9 Remove unused import 2018-01-17 16:26:56 +00:00
Matthias Bernt 4b2bf122b6 fix for microbial import tool
There seems to be no UnvalidatedValue class anymore. So I removed these
checks which seems to make the tool functional again.

Note that there is one more instance of such a check in the Galaxy
sources (in tools/parameters/basic.py). I guess this can also be
removed?
2018-01-17 15:55:10 +00:00
John Chilton 3f75a2d3a6 Re-work upload clarification from #5206.
See post-merge discussion on that issue.
2018-01-04 09:30:16 -05:00
Dannon Baker 6bf5d663b4 Merge pull request #5229 from jmchilton/upload_refactor
Refactor upload.py toward reuse
2017-12-18 11:15:37 -05:00
John Chilton 7e1bff7d69 Upload refactor - change upload.py to use exceptions.
Make decomposing and reuse of this easier downstream and feels cleaner to me.
2017-12-15 13:24:44 -05:00
John Chilton cafac19f65 Upload refactor - make link_data_only a bool.
Since it is a bool.
2017-12-15 13:24:44 -05:00
John Chilton 09f51f59af Upload optimization - eliminate second call to check_binary in upload.py. 2017-12-15 13:24:44 -05:00
Nicola Soranzo 6d3eadedbd Merge pull request #5227 from jmchilton/merge_1709
Merge 17.09.
2017-12-15 18:14:34 +00:00
John Chilton 90ba35a9a4 Merge remote-tracking branch 'jmchilton/release_17.09' into merge_1709 2017-12-15 12:02:07 -05:00
John Chilton 121285b40b Let ToolProvidedMetadata interface more directly decide if it has failed outputs.
I like this better for three reasons:

- Since usually it is scripts producing this JSON - we have the most control at that point for determining the failure and we don't have to deal with an artificial dependency between the tool's stdio and the output.
- At some point we could potentially allow some datasets to be ok now even though the job fails.
- It is a cleaner interface at the Python level between job finish and output collection IMO (no need for isinstance checking).
2017-12-15 08:34:35 -05:00
John Chilton 099c1562fe Re-organize edge case upload options for my own clarity.
I think setting each of these variables once and simplifing the context they are used in (in the case of purge_upload) makes it more clear what each variable is and how it is set. I also think one, more detailed comment for each variable helps.

Note: This will break run-as-user uploads started prior to the upgrade to 18.XX and executed after the upgrade. It is a small switch to restore the old behavior but I'm not sure it is worth the complexity it adds to the file.

```
run_as_real_user = dataset.get('run_as_real_user', False) or dataset_get.('in_place', True)
```
2017-12-13 12:54:03 -05:00
mvdbeek bac56d6b27 Drop samtools from metadata and upload tools
We only need samtools for the dataproviders, which shouldn't
be used by these tools.
2017-12-08 11:35:31 +01:00
Nicola Soranzo 0dfe73a54c Determine dynamically if an extension corresponds to an unsniffable binary datatype
Remove the need to call `Binary.register_unsniffable_binary_ext()` for
each unsniffable binary datatype.

Fix https://github.com/galaxyproject/galaxy/issues/3441 , where the upload
of files of a datatype defined in datatypes_conf.xml as subclass of an
unsniffable binary datatype ended up with "The uploaded binary file
contains inappropriate content" because it was not possible to register the
subclassed datatype as unsniffable.

Also remove unused `stop_err()` function in upload.py .
2017-12-01 10:30:24 +00:00
Nicola Soranzo 0e0acb5200 Remove is_multi_byte from upload.py
Also, when sniffing binary files, sniff images together with the other
formats and respect sniff order.

Also remove `is_multi_byte` from:
- `stream_to_open_named_file()`
- `stream_to_file()`

Remove the now unused `get_image_ext()` and `Binary.is_sniffable_binary()`
and all the calls to `Binary.register_sniffable_binary_format()`.
2017-11-30 18:06:37 +00:00
Nicola Soranzo 59f44cf2be Update get_fileobj() to use utf-8 encoding in text mode
Also, merge its 3 parameters `gzip_only`, `bz2_only`, `zip_only` into
`compressed_formats` (a list of allowed formats).

As a consequence of the changes in `get_fileobj()`, update:
- `files_diff()`
- `get_file_peek()`, which now determines that a file is binary when a
  `UnicodeDecodeError` exception is raised and doesn't need
  `is_multi_byte` any more
- `iter_headers()` and `get_headers()`, which now return Unicode and don't
  need `is_multi_byte` parameter any more

As a consequence of the changes in `get_file_peek()`, update:
- `set_peek()`, which now doesn't need `is_multi_byte` any more

As a consequence of the changes in `get_headers()`, update:
- `guess_ext` and `is_column_based()`, which now determine that a file is
  binary when a `UnicodeDecodeError` exception is raised and don't need
  `is_multi_byte` any more

As a consequence of the changes to `guess_ext`, update:
- `handle_uploaded_dataset_file() doesn't need `is_multi_byte` any more

Also, remove duplicated calls to `get_file_peek()` in
lib/galaxy/datatypes/molecules.py and lib/galaxy/datatypes/msa.py

The `is_multi_byte` was not removed from the signature of `get_file_peek()`
and `set_peek()` in order to preserve compatibility for ToolShed datatypes,
thanks @jmchilton for the review.
2017-11-28 17:46:32 +00:00
Martin Cech 7157600f85 fix few stray wiki links 2017-11-15 16:39:26 -05:00
Nicola Soranzo 9b4de72ca6 Fix all E722 errors and ignore E741
Introduced in flake8 3.5.0
Fix import order.
2017-10-24 11:29:09 +01:00
Nate Coraor 3a70d0c648 [GX-2017-0003]: Fix for the reported issue, only allow http, https, and
ftp schemes in the data_source tool.
2017-10-23 10:25:22 -04:00
Nate Coraor 391586ba01 [GX-2017-0003]: Fix for the reported issue, only allow http, https, and
ftp schemes in the data_source tool.
2017-10-23 10:24:50 -04:00
Nicola Soranzo d1bc98dfcb Python3: fix remaining print statements
Remove some debugging prints.
Fix import order.
Consolidate exception logging in ToolShed database migrations.
2017-10-12 18:34:29 +01:00
John Chilton 1fa4ea2a8a Allow multiple simulatenous uploads via single POST.
The upload.py tool itself already allowed this and update upload dataset grouping to handle this.
2017-10-02 14:59:35 -04:00
John Chilton 57ff68edd0 Merge pull request #4539 from mvdbeek/purge_source
Prevent in-place editing of uploaded files if files are imported from the FTP folder
2017-09-07 10:11:04 -04:00
mvdbeek cccf79ac5f Make bz2file dependency conditional on python being below version 3.3 2017-09-05 18:30:25 +02:00
mvdbeek 46c85ffa98 Allow working with pbzip2 compressed files
This adds supprt for uploading and uncompressing pbzip2 compressed
files by exchanging the bz2 module with bz2file (recommended as workaround in
https://docs.python.org/2/library/bz2.html). The problem was reported by
@alpapan in #4538 and this commit should fix #4538.

Depends on https://github.com/galaxyproject/starforge/pull/147 for the
bz2file wheel.
2017-09-05 16:54:34 +02:00
mvdbeek 06db29413e Move instead of copying converted datasets when possible
shutil.move tries to move files by renaming them.  If that fails with
OSError (due to permission or cross-filesystem rename) it falls back to
copying files followed by removing them
(https://github.com/python/cpython/blob/2.7/Lib/shutil.py#L279). By
using shutil.move and catching permission problems we avoid an
unnecessary copy if source and destination are on the same filesystem.

Also avoids shutil.move if the upload tool is run as real-user which
should fix https://github.com/galaxyproject/galaxy/issues/4300.
2017-09-03 12:03:36 +02:00
mvdbeek 62ef8b52ae Fix sniffing for non-binary files 2017-09-03 10:49:23 +02:00
mvdbeek 14497719ba Prevent in-place editing if purge_source is false
When importing files from the FTP folder the admin can choose to prevent
purging of imported files. In this case the source file should not be
modified in-place by galaxy.

This also modifies relevant bare `except:` statements and modifies
the meaning of `in_place` in upload.py from no external chown script to
do not edit files in place if we keep the source file.

This fixes https://github.com/galaxyproject/galaxy/issues/4527.
2017-09-03 09:48:39 +02:00
John Chilton 0fa287f76a Add autopep8 script to help rebasing branches after #4440.
Fixes a few more PEP8 issues as part of the autopep8'ing as well.
2017-08-17 13:47:03 -04:00
Nicola Soranzo a353b2e88f Fix E127 errors introduced by previous commit
using:
```
autopep8 -i -r --exclude $(sed -e 's|^|./|' -e 's|/$||' .ci/flake8_blacklist.txt | paste -sd,) --select E127 .
```
2017-08-17 11:35:39 +01:00
Nicola Soranzo 21b44bf348 Fix all E201 and E202 style errors
using the following command:
```
autopep8 -i -r --exclude $(sed -e 's|^|./|' -e 's|/$||' .ci/flake8_blacklist.txt | paste -sd,) --select E201,E202 .
```
2017-08-17 11:35:39 +01:00
John Chilton fec1eab82d Add ability to arbitrarily not decompress files on upload via API. 2017-08-12 06:36:50 -04:00
John Chilton 59aa11864a Add configuration option to disable upload content checking. 2017-08-12 06:36:50 -04:00
guerler 7a6961e30d Undo dataset renaming 2017-05-01 11:57:07 -04:00
Nate Coraor f645259dd0 Only keep the last path element when naming files uploaded via the URL
paste method
2017-02-27 10:59:21 -05:00
Nicola Soranzo 3d57c22b63 Fix I201 errors from flake8-import-order
Also fix Python3 compatibility.
Remove unused method
galaxy.tools.parameters.sanitize.ToolParameterSanitizer.restore_param() .
2016-11-23 18:31:04 +00:00