mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-09-24 16:30:27 +08:00
Merge pull request #8947 from martenson/libtags
Library tags tweaks and tests
This commit is contained in:
@@ -438,7 +438,7 @@ var LibraryDatasetView = Backbone.View.extend({
|
||||
}
|
||||
}
|
||||
var new_info = this.$el.find(".input_dataset_misc_info").val();
|
||||
if (typeof new_info !== "undefined" && new_info !== ld.get("misc_info")) {
|
||||
if (typeof new_info !== "undefined" && new_info !== ld.get("misc_info").trim()) {
|
||||
ld.set("misc_info", new_info);
|
||||
is_changed = true;
|
||||
}
|
||||
|
||||
@@ -87,7 +87,6 @@ body {
|
||||
@extend .p-0;
|
||||
@extend .w-100;
|
||||
@extend .h-100;
|
||||
@extend .overflow-hidden;
|
||||
@extend .position-absolute;
|
||||
background: $body-bg;
|
||||
color: $text-color;
|
||||
|
||||
@@ -105,8 +105,9 @@ class LibraryDatasetsManager(datasets.DatasetAssociationManager):
|
||||
new_tags = new_data.get('tags', None)
|
||||
if new_tags is not None and new_tags != ldda.tags:
|
||||
self.tag_handler.delete_item_tags(item=ldda, user=trans.user)
|
||||
for tag in new_tags:
|
||||
self.tag_handler.apply_item_tag(item=ldda, user=trans.user, name='name', value=tag)
|
||||
tag_list = self.tag_handler.parse_tags_list(new_tags)
|
||||
for tag in tag_list:
|
||||
self.tag_handler.apply_item_tag(item=ldda, user=trans.user, name=tag[0], value=tag[1])
|
||||
changed = True
|
||||
if changed:
|
||||
ldda.update_parent_folder_update_times()
|
||||
|
||||
@@ -254,8 +254,12 @@ class TagHandler(object):
|
||||
|
||||
def parse_tags(self, tag_str):
|
||||
"""
|
||||
Returns a list of raw (tag-name, value) pairs derived from a string; method scrubs tag names and values as well.
|
||||
Return value is a list of (tag_name, tag_value) tuples.
|
||||
Return a list of tag tuples (name, value) pairs derived from a string.
|
||||
|
||||
>>> th = TagHandler("bridge_of_death")
|
||||
>>> assert th.parse_tags("#ARTHUR") == [('name', 'ARTHUR')]
|
||||
>>> tags = th.parse_tags("name:Lancelot of Camelot;#Holy Grail;blue")
|
||||
>>> assert tags == [('name', 'LancelotofCamelot'), ('name', 'HolyGrail'), ('blue', None)]
|
||||
"""
|
||||
# Gracefully handle None.
|
||||
if not tag_str:
|
||||
@@ -265,9 +269,19 @@ class TagHandler(object):
|
||||
# Split tags based on separators.
|
||||
reg_exp = re.compile('[' + self.tag_separators + ']')
|
||||
raw_tags = reg_exp.split(tag_str)
|
||||
# Extract name-value pairs.
|
||||
return self.parse_tags_list(raw_tags)
|
||||
|
||||
def parse_tags_list(self, tags_list):
|
||||
"""
|
||||
Return a list of tag tuples (name, value) pairs derived from a list.
|
||||
Method scrubs tag names and values as well.
|
||||
|
||||
>>> th = TagHandler("bridge_of_death")
|
||||
>>> tags = th.parse_tags_list(["name:Lancelot of Camelot", "#Holy Grail", "blue"])
|
||||
>>> assert tags == [('name', 'LancelotofCamelot'), ('name', 'HolyGrail'), ('blue', None)]
|
||||
"""
|
||||
name_value_pairs = []
|
||||
for raw_tag in raw_tags:
|
||||
for raw_tag in tags_list:
|
||||
nv_pair = self._get_name_value_pair(raw_tag)
|
||||
scrubbed_name = self._scrub_tag_name(nv_pair[0])
|
||||
scrubbed_value = self._scrub_tag_value(nv_pair[1])
|
||||
|
||||
@@ -287,6 +287,14 @@ class LibrariesApiTestCase(api.ApiTestCase, TestsDatasets):
|
||||
self._assert_status_code_is(create_response, 200)
|
||||
self._assert_has_keys(create_response.json(), "name", "file_ext", "misc_info", "genome_build")
|
||||
|
||||
def test_update_dataset_tags(self):
|
||||
ld = self._create_dataset_in_folder_in_library("ForTagtestDataset")
|
||||
data = {"tags": ["#Lancelot", "name:Holy Grail", "blue"]}
|
||||
create_response = self._patch("libraries/datasets/%s" % ld.json()["id"], data=data)
|
||||
self._assert_status_code_is(create_response, 200)
|
||||
self._assert_has_keys(create_response.json(), "tags")
|
||||
assert create_response.json()["tags"] == "name:Lancelot, name:HolyGrail, blue"
|
||||
|
||||
def test_invalid_update_dataset_in_folder(self):
|
||||
ld = self._create_dataset_in_folder_in_library("ForInvalidUpdateDataset")
|
||||
data = {'file_ext': 'nonexisting_type'}
|
||||
|
||||
Reference in New Issue
Block a user