mirror of
https://github.com/galaxyproject/galaxy.git
synced 2026-10-25 00:12:08 +08:00
PEP-8 fixes for search.py.
This commit is contained in:
+80
-85
@@ -32,11 +32,11 @@ eggs.require("Parsley")
|
||||
import parsley
|
||||
|
||||
from galaxy.model import (HistoryDatasetAssociation, LibraryDatasetDatasetAssociation,
|
||||
History, Library, LibraryFolder, LibraryDataset,StoredWorkflowTagAssociation,
|
||||
StoredWorkflow, HistoryTagAssociation,HistoryDatasetAssociationTagAssociation,
|
||||
History, Library, LibraryFolder, LibraryDataset, StoredWorkflowTagAssociation,
|
||||
StoredWorkflow, HistoryTagAssociation, HistoryDatasetAssociationTagAssociation,
|
||||
ExtendedMetadata, ExtendedMetadataIndex, HistoryAnnotationAssociation, Job, JobParameter,
|
||||
JobToInputLibraryDatasetAssociation, JobToInputDatasetAssociation, JobToOutputDatasetAssociation,
|
||||
Page, PageRevision )
|
||||
Page, PageRevision)
|
||||
from galaxy.model.tool_shed_install import ToolVersion
|
||||
|
||||
from galaxy.util.json import to_json_string
|
||||
@@ -95,7 +95,6 @@ class ViewQueryBaseClass(object):
|
||||
if field.id_decode:
|
||||
conditional.right = trans.security.decode_id( conditional.right )
|
||||
|
||||
|
||||
def filter(self, left, operator, right):
|
||||
if operator == 'and':
|
||||
self.filter(left.left, left.operator, left.right)
|
||||
@@ -110,7 +109,7 @@ class ViewQueryBaseClass(object):
|
||||
#print field.sqlalchemy_field == right, field.sqlalchemy_field, right
|
||||
self.query = self.query.filter( field.sqlalchemy_field == right )
|
||||
elif operator == "!=":
|
||||
self.query = self.query.filter( field.sqlalchemy_field != right )
|
||||
self.query = self.query.filter( field.sqlalchemy_field != right )
|
||||
elif operator == "like":
|
||||
self.query = self.query.filter( field.sqlalchemy_field.like(right) )
|
||||
else:
|
||||
@@ -133,7 +132,7 @@ class ViewQueryBaseClass(object):
|
||||
for row in self.query.distinct().all():
|
||||
selected = True
|
||||
for f in self.post_filter:
|
||||
if not f[0](row, f[1],f[2],f[3]):
|
||||
if not f[0](row, f[1], f[2], f[3]):
|
||||
selected = False
|
||||
if selected:
|
||||
yield row
|
||||
@@ -143,6 +142,7 @@ class ViewQueryBaseClass(object):
|
||||
#Library Dataset Searching
|
||||
##################
|
||||
|
||||
|
||||
def library_extended_metadata_filter(view, left, operator, right):
|
||||
view.do_query = True
|
||||
if 'extended_metadata_joined' not in view.state:
|
||||
@@ -159,6 +159,7 @@ def library_extended_metadata_filter(view, left, operator, right):
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
def ldda_parent_library_filter(item, left, operator, right):
|
||||
if operator == '=':
|
||||
return right == item.library_dataset.folder.parent_library.id
|
||||
@@ -170,12 +171,12 @@ def ldda_parent_library_filter(item, left, operator, right):
|
||||
class LibraryDatasetDatasetView(ViewQueryBaseClass):
|
||||
VIEW_NAME = "library_dataset_dataset"
|
||||
FIELDS = {
|
||||
'extended_metadata' : ViewField('extended_metadata', handler=library_extended_metadata_filter),
|
||||
'name' : ViewField('name', sqlalchemy_field=LibraryDatasetDatasetAssociation.name ),
|
||||
'id' : ViewField('id', sqlalchemy_field=LibraryDatasetDatasetAssociation.id, id_decode=True),
|
||||
'deleted' : ViewField('deleted', sqlalchemy_field=LibraryDatasetDatasetAssociation.deleted),
|
||||
'parent_library_id' : ViewField('parent_library_id', id_decode=True, post_filter=ldda_parent_library_filter),
|
||||
'data_type' : ViewField('data_type', sqlalchemy_field=LibraryDatasetDatasetAssociation.extension)
|
||||
'extended_metadata': ViewField('extended_metadata', handler=library_extended_metadata_filter),
|
||||
'name': ViewField('name', sqlalchemy_field=LibraryDatasetDatasetAssociation.name),
|
||||
'id': ViewField('id', sqlalchemy_field=LibraryDatasetDatasetAssociation.id, id_decode=True),
|
||||
'deleted': ViewField('deleted', sqlalchemy_field=LibraryDatasetDatasetAssociation.deleted),
|
||||
'parent_library_id': ViewField('parent_library_id', id_decode=True, post_filter=ldda_parent_library_filter),
|
||||
'data_type': ViewField('data_type', sqlalchemy_field=LibraryDatasetDatasetAssociation.extension)
|
||||
}
|
||||
|
||||
def search(self, trans):
|
||||
@@ -189,20 +190,18 @@ class LibraryDatasetDatasetView(ViewQueryBaseClass):
|
||||
class LibraryView(ViewQueryBaseClass):
|
||||
VIEW_NAME = "library"
|
||||
FIELDS = {
|
||||
'name' : ViewField('name', sqlalchemy_field=Library.name ),
|
||||
'id' : ViewField('id', sqlalchemy_field=Library.id, id_decode=True),
|
||||
'deleted' : ViewField('deleted', sqlalchemy_field=Library.deleted)
|
||||
'name': ViewField('name', sqlalchemy_field=Library.name),
|
||||
'id': ViewField('id', sqlalchemy_field=Library.id, id_decode=True),
|
||||
'deleted': ViewField('deleted', sqlalchemy_field=Library.deleted)
|
||||
}
|
||||
|
||||
def search(self, trans):
|
||||
self.query = trans.sa_session.query( Library )
|
||||
|
||||
|
||||
|
||||
##################
|
||||
#Library Folder Searching
|
||||
##################
|
||||
|
||||
def library_folder_parent_library_id_filter(item, left, operator, right):
|
||||
if operator == '=':
|
||||
return item.parent_library.id == right
|
||||
@@ -210,6 +209,7 @@ def library_folder_parent_library_id_filter(item, left, operator, right):
|
||||
return item.parent_library.id != right
|
||||
raise GalaxyParseError("Invalid comparison operator: %s" % (operator))
|
||||
|
||||
|
||||
def library_path_filter(item, left, operator, right):
|
||||
lpath = "/" + "/".join(item.library_path)
|
||||
if operator == '=':
|
||||
@@ -222,22 +222,20 @@ def library_path_filter(item, left, operator, right):
|
||||
class LibraryFolderView(ViewQueryBaseClass):
|
||||
VIEW_NAME = "library_folder"
|
||||
FIELDS = {
|
||||
'name' : ViewField('name', sqlalchemy_field=LibraryFolder.name ),
|
||||
'id' : ViewField('id', sqlalchemy_field=LibraryFolder.id, id_decode=True),
|
||||
'parent_id' : ViewField('parent_id', sqlalchemy_field=LibraryFolder.parent_id, id_decode=True ),
|
||||
'parent_library_id' : ViewField('parent_library_id', post_filter=library_folder_parent_library_id_filter, id_decode=True),
|
||||
'library_path' : ViewField('library_path', post_filter=library_path_filter)
|
||||
'name': ViewField('name', sqlalchemy_field=LibraryFolder.name),
|
||||
'id': ViewField('id', sqlalchemy_field=LibraryFolder.id, id_decode=True),
|
||||
'parent_id': ViewField('parent_id', sqlalchemy_field=LibraryFolder.parent_id, id_decode=True),
|
||||
'parent_library_id': ViewField('parent_library_id', post_filter=library_folder_parent_library_id_filter, id_decode=True),
|
||||
'library_path': ViewField('library_path', post_filter=library_path_filter)
|
||||
}
|
||||
|
||||
def search(self, trans):
|
||||
self.query = trans.sa_session.query( LibraryFolder )
|
||||
|
||||
|
||||
|
||||
##################
|
||||
#Library Dataset Searching
|
||||
##################
|
||||
|
||||
def library_dataset_name_filter(item, left, operator, right):
|
||||
if operator == '=':
|
||||
return item.name == right
|
||||
@@ -249,35 +247,33 @@ def library_dataset_name_filter(item, left, operator, right):
|
||||
class LibraryDatasetView(ViewQueryBaseClass):
|
||||
VIEW_NAME = "library_dataset"
|
||||
FIELDS = {
|
||||
'name' : ViewField('name', post_filter=library_dataset_name_filter),
|
||||
'id' : ViewField('id', sqlalchemy_field=LibraryDataset.id, id_decode=True),
|
||||
'folder_id' : ViewField('folder_id', sqlalchemy_field=LibraryDataset.folder_id, id_decode=True)
|
||||
'name': ViewField('name', post_filter=library_dataset_name_filter),
|
||||
'id': ViewField('id', sqlalchemy_field=LibraryDataset.id, id_decode=True),
|
||||
'folder_id': ViewField('folder_id', sqlalchemy_field=LibraryDataset.folder_id, id_decode=True)
|
||||
}
|
||||
|
||||
def search(self, trans):
|
||||
self.query = trans.sa_session.query( LibraryDataset )
|
||||
|
||||
|
||||
|
||||
##################
|
||||
#Tool Searching
|
||||
##################
|
||||
|
||||
class ToolView(ViewQueryBaseClass):
|
||||
VIEW_NAME = "tool"
|
||||
FIELDS = {
|
||||
'tool_id' : ViewField('name', sqlalchemy_field=ToolVersion.tool_id ),
|
||||
'id' : ViewField('id', sqlalchemy_field=ToolVersion.id)
|
||||
'tool_id': ViewField('name', sqlalchemy_field=ToolVersion.tool_id),
|
||||
'id': ViewField('id', sqlalchemy_field=ToolVersion.id)
|
||||
}
|
||||
|
||||
def search(self, trans):
|
||||
# Likely this will break in subsequent model refactoring. Need to revisit.
|
||||
self.query = trans.install_model.context.query( ToolVersion )
|
||||
|
||||
|
||||
##################
|
||||
#History Dataset Searching
|
||||
##################
|
||||
|
||||
def history_dataset_handle_tag(view, left, operator, right):
|
||||
if operator == "=":
|
||||
view.do_query = True
|
||||
@@ -298,17 +294,17 @@ def history_dataset_handle_tag(view, left, operator, right):
|
||||
class HistoryDatasetView(ViewQueryBaseClass):
|
||||
DOMAIN = "history_dataset"
|
||||
FIELDS = {
|
||||
'name' : ViewField('name', sqlalchemy_field=HistoryDatasetAssociation.name),
|
||||
'id' : ViewField('id',sqlalchemy_field=HistoryDatasetAssociation.id, id_decode=True),
|
||||
'history_id' : ViewField('history_id',sqlalchemy_field=HistoryDatasetAssociation.history_id, id_decode=True),
|
||||
'tag' : ViewField("tag", handler=history_dataset_handle_tag),
|
||||
'copied_from_ldda_id' : ViewField("copied_from_ldda_id",
|
||||
'name': ViewField('name', sqlalchemy_field=HistoryDatasetAssociation.name),
|
||||
'id': ViewField('id', sqlalchemy_field=HistoryDatasetAssociation.id, id_decode=True),
|
||||
'history_id': ViewField('history_id', sqlalchemy_field=HistoryDatasetAssociation.history_id, id_decode=True),
|
||||
'tag': ViewField("tag", handler=history_dataset_handle_tag),
|
||||
'copied_from_ldda_id': ViewField("copied_from_ldda_id",
|
||||
sqlalchemy_field=HistoryDatasetAssociation.copied_from_library_dataset_dataset_association_id,
|
||||
id_decode=True),
|
||||
'copied_from_hda_id' : ViewField("copied_from_hda_id",
|
||||
'copied_from_hda_id': ViewField("copied_from_hda_id",
|
||||
sqlalchemy_field=HistoryDatasetAssociation.copied_from_history_dataset_association_id,
|
||||
id_decode=True),
|
||||
'deleted' : ViewField('deleted', sqlalchemy_field=HistoryDatasetAssociation.deleted)
|
||||
'deleted': ViewField('deleted', sqlalchemy_field=HistoryDatasetAssociation.deleted)
|
||||
}
|
||||
|
||||
def search(self, trans):
|
||||
@@ -357,10 +353,10 @@ def history_handle_annotation(view, left, operator, right):
|
||||
class HistoryView(ViewQueryBaseClass):
|
||||
DOMAIN = "history"
|
||||
FIELDS = {
|
||||
'name' : ViewField('name', sqlalchemy_field=History.name),
|
||||
'id' : ViewField('id', sqlalchemy_field=History.id, id_decode=True),
|
||||
'tag' : ViewField("tag", handler=history_handle_tag),
|
||||
'annotation' : ViewField("annotation", handler=history_handle_annotation)
|
||||
'name': ViewField('name', sqlalchemy_field=History.name),
|
||||
'id': ViewField('id', sqlalchemy_field=History.id, id_decode=True),
|
||||
'tag': ViewField("tag", handler=history_handle_tag),
|
||||
'annotation': ViewField("annotation", handler=history_handle_annotation)
|
||||
}
|
||||
|
||||
def search(self, trans):
|
||||
@@ -389,22 +385,20 @@ def workflow_tag_handler(view, left, operator, right):
|
||||
class WorkflowView(ViewQueryBaseClass):
|
||||
DOMAIN = "workflow"
|
||||
FIELDS = {
|
||||
'name' : ViewField('name', sqlalchemy_field=StoredWorkflow.name),
|
||||
'id' : ViewField('id', sqlalchemy_field=StoredWorkflow.id, id_decode=True),
|
||||
'tag' : ViewField('tag', handler=workflow_tag_handler)
|
||||
'name': ViewField('name', sqlalchemy_field=StoredWorkflow.name),
|
||||
'id': ViewField('id', sqlalchemy_field=StoredWorkflow.id, id_decode=True),
|
||||
'tag': ViewField('tag', handler=workflow_tag_handler)
|
||||
}
|
||||
|
||||
def search(self, trans):
|
||||
self.query = trans.sa_session.query( StoredWorkflow )
|
||||
|
||||
|
||||
|
||||
##################
|
||||
#Job Searching
|
||||
##################
|
||||
|
||||
|
||||
|
||||
def job_param_filter(view, left, operator, right):
|
||||
view.do_query = True
|
||||
alias = aliased( JobParameter )
|
||||
@@ -417,6 +411,7 @@ def job_param_filter(view, left, operator, right):
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
def job_input_hda_filter(view, left, operator, right):
|
||||
view.do_query = True
|
||||
alias = aliased( JobToInputDatasetAssociation )
|
||||
@@ -429,6 +424,7 @@ def job_input_hda_filter(view, left, operator, right):
|
||||
)
|
||||
)
|
||||
|
||||
|
||||
def job_input_ldda_filter(view, left, operator, right):
|
||||
view.do_query = True
|
||||
alias = aliased( JobToInputLibraryDatasetAssociation )
|
||||
@@ -442,7 +438,6 @@ def job_input_ldda_filter(view, left, operator, right):
|
||||
)
|
||||
|
||||
|
||||
|
||||
def job_output_hda_filter(view, left, operator, right):
|
||||
view.do_query = True
|
||||
alias = aliased( JobToOutputDatasetAssociation )
|
||||
@@ -459,36 +454,34 @@ def job_output_hda_filter(view, left, operator, right):
|
||||
class JobView(ViewQueryBaseClass):
|
||||
DOMAIN = "job"
|
||||
FIELDS = {
|
||||
'tool_name' : ViewField('tool_name', sqlalchemy_field=Job.tool_id),
|
||||
'state' : ViewField('state', sqlalchemy_field=Job.state),
|
||||
'param' : ViewField('param', handler=job_param_filter),
|
||||
'input_ldda' : ViewField('input_ldda', handler=job_input_ldda_filter, id_decode=True),
|
||||
'input_hda' : ViewField('input_hda', handler=job_input_hda_filter, id_decode=True),
|
||||
'output_hda' : ViewField('output_hda', handler=job_output_hda_filter, id_decode=True)
|
||||
'tool_name': ViewField('tool_name', sqlalchemy_field=Job.tool_id),
|
||||
'state': ViewField('state', sqlalchemy_field=Job.state),
|
||||
'param': ViewField('param', handler=job_param_filter),
|
||||
'input_ldda': ViewField('input_ldda', handler=job_input_ldda_filter, id_decode=True),
|
||||
'input_hda': ViewField('input_hda', handler=job_input_hda_filter, id_decode=True),
|
||||
'output_hda': ViewField('output_hda', handler=job_output_hda_filter, id_decode=True)
|
||||
}
|
||||
|
||||
def search(self, trans):
|
||||
self.query = trans.sa_session.query( Job )
|
||||
|
||||
|
||||
|
||||
##################
|
||||
#Page Searching
|
||||
##################
|
||||
|
||||
|
||||
class PageView(ViewQueryBaseClass):
|
||||
DOMAIN = "page"
|
||||
FIELDS = {
|
||||
'id' : ViewField('id', sqlalchemy_field=Page.id, id_decode=True),
|
||||
'title' : ViewField('title', sqlalchemy_field=Page.title),
|
||||
'id': ViewField('id', sqlalchemy_field=Page.id, id_decode=True),
|
||||
'title': ViewField('title', sqlalchemy_field=Page.title),
|
||||
}
|
||||
|
||||
def search(self, trans):
|
||||
self.query = trans.sa_session.query( Page )
|
||||
|
||||
|
||||
|
||||
|
||||
##################
|
||||
#Page Revision Searching
|
||||
##################
|
||||
@@ -497,35 +490,34 @@ class PageView(ViewQueryBaseClass):
|
||||
class PageRevisionView(ViewQueryBaseClass):
|
||||
DOMAIN = "page_revision"
|
||||
FIELDS = {
|
||||
'id' : ViewField('id', sqlalchemy_field=PageRevision.id, id_decode=True),
|
||||
'title' : ViewField('title', sqlalchemy_field=PageRevision.title),
|
||||
'page_id' : ViewField('page_id', sqlalchemy_field=PageRevision.page_id, id_decode=True),
|
||||
'id': ViewField('id', sqlalchemy_field=PageRevision.id, id_decode=True),
|
||||
'title': ViewField('title', sqlalchemy_field=PageRevision.title),
|
||||
'page_id': ViewField('page_id', sqlalchemy_field=PageRevision.page_id, id_decode=True),
|
||||
}
|
||||
|
||||
def search(self, trans):
|
||||
self.query = trans.sa_session.query( PageRevision )
|
||||
|
||||
|
||||
|
||||
"""
|
||||
The view mapping takes a user's name for a table and maps it to a View class that will
|
||||
handle queries
|
||||
"""
|
||||
view_mapping = {
|
||||
'library' : LibraryView,
|
||||
'library_folder' : LibraryFolderView,
|
||||
'library_dataset_dataset' : LibraryDatasetDatasetView,
|
||||
'library_dataset' : LibraryDatasetView,
|
||||
'lda' : LibraryDatasetView,
|
||||
'ldda' : LibraryDatasetDatasetView,
|
||||
'history_dataset' : HistoryDatasetView,
|
||||
'hda' : HistoryDatasetView,
|
||||
'history' : HistoryView,
|
||||
'workflow' : WorkflowView,
|
||||
'tool' : ToolView,
|
||||
'job' : JobView,
|
||||
'page' : PageView,
|
||||
'page_revision' : PageRevisionView,
|
||||
'library': LibraryView,
|
||||
'library_folder': LibraryFolderView,
|
||||
'library_dataset_dataset': LibraryDatasetDatasetView,
|
||||
'library_dataset': LibraryDatasetView,
|
||||
'lda': LibraryDatasetView,
|
||||
'ldda': LibraryDatasetDatasetView,
|
||||
'history_dataset': HistoryDatasetView,
|
||||
'hda': HistoryDatasetView,
|
||||
'history': HistoryView,
|
||||
'workflow': WorkflowView,
|
||||
'tool': ToolView,
|
||||
'job': JobView,
|
||||
'page': PageView,
|
||||
'page_revision': PageRevisionView,
|
||||
}
|
||||
|
||||
"""
|
||||
@@ -575,6 +567,7 @@ not_quote = anything:x ?(x != "'") -> x
|
||||
not_dquote = anything:x ?(x != '"') -> x
|
||||
"""
|
||||
|
||||
|
||||
class GalaxyQuery:
|
||||
"""
|
||||
This class represents a data structure of a compiled GQL query
|
||||
@@ -584,6 +577,7 @@ class GalaxyQuery:
|
||||
self.table_name = table_name
|
||||
self.conditional = conditional
|
||||
|
||||
|
||||
class GalaxyQueryComparison:
|
||||
"""
|
||||
This class represents the data structure of the comparison arguments of a
|
||||
@@ -594,6 +588,7 @@ class GalaxyQueryComparison:
|
||||
self.operator = operator
|
||||
self.right = right
|
||||
|
||||
|
||||
class GalaxyQueryAnd:
|
||||
"""
|
||||
This class represents the data structure of the comparison arguments of a
|
||||
@@ -608,6 +603,7 @@ class GalaxyQueryAnd:
|
||||
class GalaxyParseError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
class SearchQuery:
|
||||
def __init__(self, view, query):
|
||||
self.view = view
|
||||
@@ -623,7 +619,8 @@ class SearchQuery:
|
||||
self.view.filter(
|
||||
self.query.conditional.left,
|
||||
self.query.conditional.operator,
|
||||
self.query.conditional.right )
|
||||
self.query.conditional.right
|
||||
)
|
||||
return self.view.get_results(True)
|
||||
|
||||
def item_to_api_value(self, item):
|
||||
@@ -637,17 +634,16 @@ class SearchQuery:
|
||||
return o
|
||||
|
||||
|
||||
|
||||
class GalaxySearchEngine:
|
||||
"""
|
||||
Primary class for searching. Parses GQL (Galaxy Query Language) queries and returns a 'SearchQuery' class
|
||||
"""
|
||||
def __init__(self):
|
||||
self.parser = parsley.makeGrammar(gqlGrammar, {
|
||||
're' : re,
|
||||
'GalaxyQuery' : GalaxyQuery,
|
||||
'GalaxyQueryComparison' : GalaxyQueryComparison,
|
||||
'GalaxyQueryAnd' : GalaxyQueryAnd
|
||||
're': re,
|
||||
'GalaxyQuery': GalaxyQuery,
|
||||
'GalaxyQueryComparison': GalaxyQueryComparison,
|
||||
'GalaxyQueryAnd': GalaxyQueryAnd
|
||||
})
|
||||
|
||||
def query(self, query_text):
|
||||
@@ -657,4 +653,3 @@ class GalaxySearchEngine:
|
||||
view = view_mapping[q.table_name]()
|
||||
return SearchQuery(view, q)
|
||||
raise GalaxyParseError("No such table %s" % (q.table_name))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user