Ejemplo n.º 1
0
class LibraryDatasetsSelectionGrid(grids.Grid):
    available_tracks = None
    title = "Add Datasets"
    model_class = model.LibraryDatasetDatasetAssociation
    default_filter = {"deleted": "False"}
    default_sort_key = "-id"
    columns = [
        grids.GridColumn("Id", key="id"),
        grids.TextColumn("Name",
                         key="name",
                         model_class=model.LibraryDatasetDatasetAssociation),
        grids.TextColumn("Type",
                         key="extension",
                         model_class=model.LibraryDatasetDatasetAssociation),
    ]
    columns.append(
        grids.MulticolFilterColumn("Search name and filetype",
                                   cols_to_filter=[columns[1], columns[2]],
                                   key="free-text-search",
                                   visible=False,
                                   filterable="standard"))

    def build_initial_query(self, trans, **kwargs):
        return trans.sa_session.query(self.model_class).join(
            model.Dataset.table)

    def apply_query_filter(self, trans, query, **kwargs):
        if self.available_tracks is None:
            self.available_tracks = trans.app.datatypes_registry.get_available_tracks(
            )
        return query.filter(model.LibraryDatasetDatasetAssociation.user == trans.user) \
                    .filter(model.LibraryDatasetDatasetAssociation.extension.in_(self.available_tracks)) \
                    .filter(model.Dataset.state == model.Dataset.states.OK) \
                    .filter(model.LibraryDatasetDatasetAssociation.deleted == false()) \
                    .filter(model.LibraryDatasetDatasetAssociation.visible == true())
Ejemplo n.º 2
0
class VisualizationSelectionGrid(ItemSelectionGrid):
    """ Grid for selecting visualizations. """
    # Grid definition.
    title = "Saved Visualizations"
    model_class = model.Visualization
    columns = [
        grids.TextColumn("Title", key="title", filterable="advanced"),
        grids.TextColumn("Type", key="type"),
        grids.IndividualTagsColumn(
            "Tags",
            key="tags",
            model_tag_association_class=model.VisualizationTagAssociation,
            filterable="advanced",
            grid_name="VisualizationListGrid"),
        grids.SharingStatusColumn("Sharing",
                                  key="sharing",
                                  filterable="advanced",
                                  sortable=False),
        grids.GridColumn("Last Updated", key="update_time", format=time_ago),
    ]
    columns.append(
        grids.MulticolFilterColumn("Search",
                                   cols_to_filter=[columns[0], columns[2]],
                                   key="free-text-search",
                                   visible=False,
                                   filterable="standard"))
Ejemplo n.º 3
0
class VisualizationListGrid( grids.Grid ):
    def get_url_args( item ):
        """
        Returns dictionary used to create item link.
        """
        url_kwargs = dict( controller='visualization', id=item.id )
        #TODO: hack to build link to saved visualization - need trans in this function instead in order to do
        #link_data = trans.app.visualizations_registry.get_visualizations( trans, item )
        if item.type in registry.VisualizationsRegistry.BUILT_IN_VISUALIZATIONS:
            url_kwargs[ 'action' ] = item.type
        else:
            url_kwargs[ 'action' ] = 'saved'
        return url_kwargs

    def get_display_name( self, trans, item ):
        if trans.app.visualizations_registry and item.type in trans.app.visualizations_registry.plugins:
            plugin = trans.app.visualizations_registry.plugins[ item.type ]
            return plugin.config.get( 'name', item.type )
        return item.type

    # Grid definition
    title = "Saved Visualizations"
    model_class = model.Visualization
    default_sort_key = "-update_time"
    default_filter = dict( title="All", deleted="False", tags="All", sharing="All" )
    columns = [
        grids.TextColumn( "Title", key="title", attach_popup=True, link=get_url_args ),
        grids.TextColumn( "Type", method='get_display_name' ),
        grids.TextColumn( "Dbkey", key="dbkey" ),
        grids.IndividualTagsColumn( "Tags", key="tags", model_tag_association_class=model.VisualizationTagAssociation, filterable="advanced", grid_name="VisualizationListGrid" ),
        grids.SharingStatusColumn( "Sharing", key="sharing", filterable="advanced", sortable=False ),
        grids.GridColumn( "Created", key="create_time", format=time_ago ),
        grids.GridColumn( "Last Updated", key="update_time", format=time_ago ),
    ]
    columns.append(
        grids.MulticolFilterColumn(
        "Search",
        cols_to_filter=[ columns[0], columns[2] ],
        key="free-text-search", visible=False, filterable="standard" )
                )
    global_actions = [
        grids.GridAction( "Create new visualization", dict( action='create' ), inbound=True )
    ]
    operations = [
        grids.GridOperation( "Open", allow_multiple=False, url_args=get_url_args ),
        grids.GridOperation( "Open in Circster", allow_multiple=False, condition=( lambda item: item.type == 'trackster' ), url_args=dict( action='circster' ) ),
        grids.GridOperation( "Edit Attributes", allow_multiple=False, url_args=dict( action='edit'), inbound=True),
        grids.GridOperation( "Copy", allow_multiple=False, condition=( lambda item: not item.deleted )),
        grids.GridOperation( "Share or Publish", allow_multiple=False, condition=( lambda item: not item.deleted ), async_compatible=False ),
        grids.GridOperation( "Delete", condition=( lambda item: not item.deleted ), confirm="Are you sure you want to delete this visualization?" ),
    ]
    def apply_query_filter( self, trans, query, **kwargs ):
        return query.filter_by( user=trans.user, deleted=False )
Ejemplo n.º 4
0
class PageSelectionGrid(ItemSelectionGrid):
    """ Grid for selecting pages. """
    # Grid definition.
    title = "Saved Pages"
    model_class = model.Page
    columns = [
        grids.TextColumn("Title", key="title", filterable="advanced"),
        grids.IndividualTagsColumn(
            "Tags",
            key="tags",
            model_tag_association_class=model.PageTagAssociation,
            filterable="advanced"),
        grids.GridColumn("Last Updated", key="update_time", format=time_ago),
        # Columns that are valid for filtering but are not visible.
        grids.DeletedColumn("Deleted",
                            key="deleted",
                            visible=False,
                            filterable="advanced"),
        grids.SharingStatusColumn("Sharing",
                                  key="sharing",
                                  filterable="advanced",
                                  sortable=False,
                                  visible=False),
    ]
    columns.append(
        grids.MulticolFilterColumn("Search",
                                   cols_to_filter=[columns[0], columns[1]],
                                   key="free-text-search",
                                   visible=False,
                                   filterable="standard"))
Ejemplo n.º 5
0
class PageListGrid( grids.Grid ):
    # Grid definition
    use_panels = True
    title = "Pages"
    model_class = model.Page
    default_filter = { "published" : "All"}
    default_sort_key = "-create_time"
    columns = [
        grids.TextColumn( "Title", key="title", model_class=model.Page, attach_popup=True, filterable="standard" ),
        PublicURLColumn( "Public URL" ),
        grids.GridColumn( "Published", key="published", format=format_bool, filterable="standard" ),
        grids.GridColumn( "Created", key="create_time", format=time_ago ),
        grids.GridColumn( "Last Updated", key="update_time", format=time_ago ),
    ]
    global_actions = [
        grids.GridAction( "Add new page", dict( action='create' ) )
    ]
    operations = [
        grids.GridOperation( "View", allow_multiple=False, url_args=dict( action='display') ),
        grids.GridOperation( "Edit name/id", allow_multiple=False, url_args=dict( action='edit') ),
        grids.GridOperation( "Edit content", allow_multiple=False, url_args=dict( action='edit_content') ),
        grids.GridOperation( "Delete" ),
        grids.GridOperation( "Publish", condition=( lambda item: not item.published ) ),
        grids.GridOperation( "Unpublish", condition=( lambda item: item.published ) ),
    ]
    def apply_default_filter( self, trans, query, **kwargs ):
        return query.filter_by( user=trans.user, deleted=False )
Ejemplo n.º 6
0
class UserOpenIDGrid(grids.Grid):
    use_panels = False
    title = "OpenIDs linked to your account"
    model_class = model.UserOpenID
    template = '/user/openid_manage.mako'
    default_filter = {"openid": "All"}
    default_sort_key = "-create_time"
    columns = [
        grids.TextColumn("OpenID URL",
                         key="openid",
                         link=(lambda x: dict(action='openid_auth',
                                              login_button="Login",
                                              openid_url=x.openid
                                              if not x.provider else '',
                                              openid_provider=x.provider,
                                              auto_associate=True))),
        grids.GridColumn("Created", key="create_time", format=time_ago),
    ]
    operations = [
        grids.GridOperation("Delete", async_compatible=True),
    ]

    def build_initial_query(self, trans, **kwd):
        return trans.sa_session.query(
            self.model_class).filter(self.model_class.user_id == trans.user.id)
Ejemplo n.º 7
0
class HistoryDatasetsSelectionGrid(grids.Grid):

    class DbKeyColumn(grids.GridColumn):
        def filter(self, trans, user, query, dbkey):
            """ Filter by dbkey through a raw SQL b/c metadata is a BLOB. """
            dbkey_user, dbkey = decode_dbkey(dbkey)
            dbkey = dbkey.replace("'", "\\'")
            return query.filter(or_(text("metadata like '%%\"dbkey\": [\"%s\"]%%'" % dbkey,
                                         "metadata like '%%\"dbkey\": \"%s\"%%'" % dbkey)))

    class HistoryColumn(grids.GridColumn):
        def get_value(self, trans, grid, hda):
            return escape(hda.history.name)

        def sort(self, trans, query, ascending, column_name=None):
            """Sort query using this column."""
            return grids.GridColumn.sort(self, trans, query, ascending, column_name="history_id")

    available_tracks = None
    title = "Add Datasets"
    model_class = model.HistoryDatasetAssociation
    default_filter = {"deleted": "False", "shared": "All"}
    default_sort_key = "-hid"
    columns = [
        grids.GridColumn("Id", key="hid"),
        grids.TextColumn("Name", key="name", model_class=model.HistoryDatasetAssociation),
        grids.TextColumn("Type", key="extension", model_class=model.HistoryDatasetAssociation),
        grids.TextColumn("history_id", key="history_id", model_class=model.HistoryDatasetAssociation, visible=False),
        HistoryColumn("History", key="history", visible=True),
        DbKeyColumn("Build", key="dbkey", model_class=model.HistoryDatasetAssociation, visible=True, sortable=False)
    ]
    columns.append(
        grids.MulticolFilterColumn("Search name and filetype", cols_to_filter=[columns[1], columns[2]],
                                   key="free-text-search", visible=False, filterable="standard")
    )

    def build_initial_query(self, trans, **kwargs):
        return trans.sa_session.query(self.model_class).join(model.History.table).join(model.Dataset.table)

    def apply_query_filter(self, trans, query, **kwargs):
        if self.available_tracks is None:
            self.available_tracks = trans.app.datatypes_registry.get_available_tracks()
        return query.filter(model.History.user == trans.user) \
                    .filter(model.HistoryDatasetAssociation.extension.in_(self.available_tracks)) \
                    .filter(model.Dataset.state == model.Dataset.states.OK) \
                    .filter(model.HistoryDatasetAssociation.deleted == false()) \
                    .filter(model.HistoryDatasetAssociation.visible == true())
Ejemplo n.º 8
0
class VisualizationListGrid( grids.Grid ):
    def get_url_args( item ):
        """
        Returns dictionary used to create item link.
        """
        controller = "visualization"
        action = item.type
        if item.type == "phyloviz":
            controller = "phyloviz"
            action = "visualization"
        return dict( controller=controller, action=action, id=item.id )

    # Grid definition
    title = "Saved Visualizations"
    model_class = model.Visualization
    default_sort_key = "-update_time"
    default_filter = dict( title="All", deleted="False", tags="All", sharing="All" )
    columns = [
        grids.TextColumn( "Title", key="title", attach_popup=True, link=get_url_args ),
        grids.TextColumn( "Type", key="type" ),
        grids.TextColumn( "Dbkey", key="dbkey" ),
        grids.IndividualTagsColumn( "Tags", key="tags", model_tag_association_class=model.VisualizationTagAssociation, filterable="advanced", grid_name="VisualizationListGrid" ),
        grids.SharingStatusColumn( "Sharing", key="sharing", filterable="advanced", sortable=False ),
        grids.GridColumn( "Created", key="create_time", format=time_ago ),
        grids.GridColumn( "Last Updated", key="update_time", format=time_ago ),
    ]    
    columns.append( 
        grids.MulticolFilterColumn(  
        "Search", 
        cols_to_filter=[ columns[0], columns[2] ], 
        key="free-text-search", visible=False, filterable="standard" )
                )
    global_actions = [
        grids.GridAction( "Create new visualization", dict( action='create' ) )
    ]
    operations = [
        grids.GridOperation( "Open", allow_multiple=False, url_args=get_url_args ),
        grids.GridOperation( "Open in Circster", allow_multiple=False, condition=( lambda item: item.type == 'trackster' ), url_args=dict( action='circster' ) ),
        grids.GridOperation( "Edit Attributes", allow_multiple=False, url_args=dict( action='edit') ),
        grids.GridOperation( "Copy", allow_multiple=False, condition=( lambda item: not item.deleted ), async_compatible=False, url_args=dict( action='copy') ),
        grids.GridOperation( "Share or Publish", allow_multiple=False, condition=( lambda item: not item.deleted ), async_compatible=False ),
        grids.GridOperation( "Delete", condition=( lambda item: not item.deleted ), async_compatible=True, confirm="Are you sure you want to delete this visualization?" ),
    ]
    def apply_query_filter( self, trans, query, **kwargs ):
        return query.filter_by( user=trans.user, deleted=False )
Ejemplo n.º 9
0
class StoredWorkflowListGrid(grids.Grid):
    class StepsColumn(grids.GridColumn):
        def get_value(self, trans, grid, workflow):
            return len(workflow.latest_workflow.steps)

    # Grid definition
    use_panels = True
    title = "Saved Workflows"
    model_class = model.StoredWorkflow
    default_filter = {"name": "All", "tags": "All"}
    default_sort_key = "-update_time"
    columns = [
        grids.TextColumn("Name",
                         key="name",
                         attach_popup=True,
                         filterable="advanced"),
        grids.IndividualTagsColumn(
            "Tags",
            "tags",
            model_tag_association_class=model.StoredWorkflowTagAssociation,
            filterable="advanced",
            grid_name="StoredWorkflowListGrid"),
        StepsColumn("Steps"),
        grids.GridColumn("Created", key="create_time", format=time_ago),
        grids.GridColumn("Last Updated", key="update_time", format=time_ago),
    ]
    columns.append(
        grids.MulticolFilterColumn("Search",
                                   cols_to_filter=[columns[0], columns[1]],
                                   key="free-text-search",
                                   visible=False,
                                   filterable="standard"))
    operations = [
        grids.GridOperation("Edit",
                            allow_multiple=False,
                            condition=(lambda item: not item.deleted),
                            async_compatible=False),
        grids.GridOperation("Run",
                            condition=(lambda item: not item.deleted),
                            async_compatible=False),
        grids.GridOperation("Copy",
                            condition=(lambda item: not item.deleted),
                            async_compatible=False),
        grids.GridOperation("Rename",
                            condition=(lambda item: not item.deleted),
                            async_compatible=False),
        grids.GridOperation("Sharing",
                            condition=(lambda item: not item.deleted),
                            async_compatible=False),
        grids.GridOperation("Delete",
                            condition=(lambda item: item.deleted),
                            async_compatible=True),
    ]

    def apply_query_filter(self, trans, query, **kwargs):
        return query.filter_by(user=trans.user, deleted=False)
Ejemplo n.º 10
0
class TracksterSelectionGrid( grids.Grid ):
    # Grid definition.
    title = "Insert into visualization"
    template = "/tracks/add_to_viz.mako"
    async_template = "/page/select_items_grid_async.mako"
    model_class = model.Visualization
    default_sort_key = "-update_time"
    use_async = True
    use_paging = False
    columns = [
        grids.TextColumn( "Title", key="title", model_class=model.Visualization, filterable="standard" ),
        grids.TextColumn( "Dbkey", key="dbkey", model_class=model.Visualization ),
        grids.GridColumn( "Last Updated", key="update_time", format=time_ago )
    ]

    def build_initial_query( self, trans, **kwargs ):
        return trans.sa_session.query( self.model_class ).filter( self.model_class.deleted == False )
    def apply_query_filter( self, trans, query, **kwargs ):
        return query.filter( self.model_class.user_id == trans.user.id )
Ejemplo n.º 11
0
class TracksterSelectionGrid(grids.Grid):
    title = "Insert into visualization"
    model_class = model.Visualization
    default_sort_key = "-update_time"
    use_paging = False
    show_item_checkboxes = True
    columns = [
        grids.TextColumn("Title", key="title", model_class=model.Visualization, filterable="standard"),
        grids.TextColumn("Build", key="dbkey", model_class=model.Visualization),
        grids.GridColumn("Last Updated", key="update_time", format=time_ago)
    ]

    def build_initial_query(self, trans, **kwargs):
        return trans.sa_session.query(self.model_class)

    def apply_query_filter(self, trans, query, **kwargs):
        return query.filter(self.model_class.user_id == trans.user.id) \
                    .filter(self.model_class.deleted == false()) \
                    .filter(self.model_class.type == "trackster")
Ejemplo n.º 12
0
class HistoryDatasetsSelectionGrid( grids.Grid ):
    # Grid definition.
    available_tracks = None
    title = "Add Datasets"
    template = "tracks/history_datasets_select_grid.mako"
    model_class = model.HistoryDatasetAssociation
    default_filter = { "deleted" : "False" , "shared" : "All" }
    default_sort_key = "-hid"
    use_async = True
    use_paging = False
    columns = [
        grids.GridColumn( "Id", key="hid" ),
        grids.TextColumn( "Name", key="name", model_class=model.HistoryDatasetAssociation ),
        grids.TextColumn( "Filetype", key="extension", model_class=model.HistoryDatasetAssociation ),
        HistoryColumn( "History", key="history", visible=False ),
        DbKeyColumn( "Dbkey", key="dbkey", model_class=model.HistoryDatasetAssociation, visible=True, sortable=False )
    ]
    columns.append( 
        grids.MulticolFilterColumn( "Search name and filetype", cols_to_filter=[ columns[1], columns[2] ], 
        key="free-text-search", visible=False, filterable="standard" )
    )
    
    def get_current_item( self, trans, **kwargs ):
        """ 
        Current item for grid is the history being queried. This is a bit 
        of hack since current_item typically means the current item in the grid.
        """
        return model.History.get( trans.security.decode_id( kwargs[ 'f-history' ] ) )
    def build_initial_query( self, trans, **kwargs ):
        return trans.sa_session.query( self.model_class ).join( model.History.table ).join( model.Dataset.table )
    def apply_query_filter( self, trans, query, **kwargs ):
        if self.available_tracks is None:
             self.available_tracks = trans.app.datatypes_registry.get_available_tracks()
        return query.filter( model.HistoryDatasetAssociation.extension.in_(self.available_tracks) ) \
                    .filter( model.Dataset.state == model.Dataset.states.OK ) \
                    .filter( model.HistoryDatasetAssociation.deleted == False ) \
                    .filter( model.HistoryDatasetAssociation.visible == True )
Ejemplo n.º 13
0
class PageAllPublishedGrid( grids.Grid ):
    # Grid definition
    use_panels = True
    title = "Published Pages From All Users"
    model_class = model.Page
    default_sort_key = "-create_time"
    columns = [
        grids.TextColumn( "Title", model_class=model.Page, key="title", filterable="standard" ),
        PublicURLColumn( "Public URL" ),
        OwnerColumn( "Published by", model_class=model.User, key="username" ), 
        grids.GridColumn( "Created", key="create_time", format=time_ago ),
        grids.GridColumn( "Last Updated", key="update_time", format=time_ago ),
    ]
    def apply_default_filter( self, trans, query, **kwargs ):
        return query.filter_by( deleted=False, published=True )
Ejemplo n.º 14
0
class PageListGrid( grids.Grid ):
    # Custom column.
    class URLColumn( grids.PublicURLColumn ):
        def get_value( self, trans, grid, item ):
            return url_for(controller='page', action='display_by_username_and_slug', username=item.user.username, slug=item.slug )

    # Grid definition
    use_panels = True
    title = "Pages"
    model_class = model.Page
    default_filter = { "published" : "All", "tags" : "All", "title" : "All", "sharing" : "All" }
    default_sort_key = "-update_time"
    columns = [
        grids.TextColumn( "Title", key="title", attach_popup=True, filterable="advanced" ),
        URLColumn( "Public URL" ),
        grids.OwnerAnnotationColumn( "Annotation", key="annotation", model_annotation_association_class=model.PageAnnotationAssociation, filterable="advanced" ),
        grids.IndividualTagsColumn( "Tags", key="tags", model_tag_association_class=model.PageTagAssociation, filterable="advanced", grid_name="PageListGrid" ),
        grids.SharingStatusColumn( "Sharing", key="sharing", filterable="advanced", sortable=False ),
        grids.GridColumn( "Created", key="create_time", format=time_ago ),
        grids.GridColumn( "Last Updated", key="update_time", format=time_ago ),
    ]
    columns.append(
        grids.MulticolFilterColumn(
        "Search",
        cols_to_filter=[ columns[0], columns[2] ],
        key="free-text-search", visible=False, filterable="standard" )
                )
    global_actions = [
        grids.GridAction( "Add new page", dict( action='create' ) )
    ]
    operations = [
        grids.DisplayByUsernameAndSlugGridOperation( "View", allow_multiple=False ),
        grids.GridOperation( "Edit content", allow_multiple=False, url_args=dict( action='edit_content') ),
        grids.GridOperation( "Edit attributes", allow_multiple=False, url_args=dict( action='edit') ),
        grids.GridOperation( "Share or Publish", allow_multiple=False, condition=( lambda item: not item.deleted ), async_compatible=False ),
        grids.GridOperation( "Delete", confirm="Are you sure you want to delete this page?" ),
    ]
    def apply_query_filter( self, trans, query, **kwargs ):
        return query.filter_by( user=trans.user, deleted=False )
Ejemplo n.º 15
0
class HistoryDatasetAssociationListGrid(grids.Grid):
    # Custom columns for grid.
    class HistoryColumn(grids.GridColumn):
        def get_value(self, trans, grid, hda):
            return hda.history.name

    class StatusColumn(grids.GridColumn):
        def get_value(self, trans, grid, hda):
            if hda.deleted:
                return "deleted"
            return ""

        def get_accepted_filters(self):
            """ Returns a list of accepted filters for this column. """
            accepted_filter_labels_and_vals = {
                "Active": "False",
                "Deleted": "True",
                "All": "All"
            }
            accepted_filters = []
            for label, val in accepted_filter_labels_and_vals.items():
                args = {self.key: val}
                accepted_filters.append(grids.GridColumnFilter(label, args))
            return accepted_filters

    # Grid definition
    title = "Saved Datasets"
    model_class = model.HistoryDatasetAssociation
    template = '/dataset/grid.mako'
    default_sort_key = "-create_time"
    columns = [
        grids.TextColumn(
            "Name",
            key="name",
            model_class=model.HistoryDatasetAssociation,
            # Link name to dataset's history.
            link=(lambda item: iff(item.history.deleted, None,
                                   dict(operation="switch", id=item.id))),
            filterable="advanced"),
        HistoryColumn("History",
                      key="history",
                      link=(lambda item: iff(
                          item.history.deleted, None,
                          dict(operation="switch_history", id=item.id)))),
        grids.TagsColumn("Tags",
                         "tags",
                         model.HistoryDatasetAssociation,
                         model.HistoryDatasetAssociationTagAssociation,
                         filterable="advanced",
                         grid_name="HistoryDatasetAssocationListGrid"),
        StatusColumn("Status", key="deleted", attach_popup=False),
        grids.GridColumn("Created", key="create_time", format=time_ago),
        grids.GridColumn("Last Updated", key="update_time", format=time_ago),
    ]
    columns.append(
        grids.MulticolFilterColumn("Search",
                                   cols_to_filter=[columns[0], columns[2]],
                                   key="free-text-search",
                                   visible=False,
                                   filterable="standard"))
    operations = []
    standard_filters = []
    default_filter = dict(name="All", deleted="False", tags="All")
    preserve_state = False
    use_paging = True
    num_rows_per_page = 50

    def apply_default_filter(self, trans, query, **kwargs):
        # This is a somewhat obtuse way to join the History and HDA tables. However, it's necessary
        # because the initial query in build_initial_query is specificied on the HDA table (this is reasonable)
        # and there's no simple property in the HDA to do the join.
        return query.select_from(
            model.HistoryDatasetAssociation.table.join(
                model.History.table)).filter(model.History.user == trans.user)
Ejemplo n.º 16
0
 title = "External Services"
 template = "admin/external_service/grid.mako"
 model_class = model.ExternalService
 default_sort_key = "-create_time"
 num_rows_per_page = 50
 preserve_state = True
 use_paging = True
 default_filter = dict( deleted="False" )
 columns = [
     NameColumn( "Name", 
                 key="name",
                 link=( lambda item: iff( item.deleted, None, dict( operation="view", id=item.id ) ) ),
                 attach_popup=True,
                 filterable="advanced" ),
     grids.TextColumn( "Description",
                        key='description',
                        filterable="advanced" ),
     ExternalServiceTypeColumn( "External Service Type" ),
     grids.GridColumn( "Last Updated", 
                       key="update_time", 
                       format=time_ago ),
     grids.DeletedColumn( "Deleted", 
                          key="deleted", 
                          visible=False, 
                          filterable="advanced" )
 ]
 columns.append( grids.MulticolFilterColumn( "Search", 
                                             cols_to_filter=[ columns[0], columns[1] ], 
                                             key="free-text-search",
                                             visible=False,
                                             filterable="standard" ) )
Ejemplo n.º 17
0
class ExternalServiceGrid(grids.Grid):
    # Custom column types
    class NameColumn(grids.TextColumn):
        def get_value(self, trans, grid, external_service):
            return external_service.name

    class ExternalServiceTypeColumn(grids.TextColumn):
        def get_value(self, trans, grid, external_service):
            try:
                return trans.app.external_service_types.all_external_service_types[
                    external_service.external_service_type_id].name
            except KeyError:
                return 'Error in loading external_service type: %s' % external_service.external_service_type_id

    # Grid definition
    title = "External Services"
    template = "admin/external_service/grid.mako"
    model_class = model.ExternalService
    default_sort_key = "-create_time"
    num_rows_per_page = 50
    preserve_state = True
    use_paging = True
    default_filter = dict(deleted="False")
    columns = [
        NameColumn("Name",
                   key="name",
                   link=(lambda item: iff(item.deleted, None,
                                          dict(operation="view", id=item.id))),
                   attach_popup=True,
                   filterable="advanced"),
        grids.TextColumn("Description",
                         key='description',
                         filterable="advanced"),
        ExternalServiceTypeColumn("External Service Type"),
        grids.GridColumn("Last Updated", key="update_time", format=time_ago),
        grids.DeletedColumn("Deleted",
                            key="deleted",
                            visible=False,
                            filterable="advanced")
    ]
    columns.append(
        grids.MulticolFilterColumn("Search",
                                   cols_to_filter=[columns[0], columns[1]],
                                   key="free-text-search",
                                   visible=False,
                                   filterable="standard"))
    operations = [
        grids.GridOperation("Edit",
                            allow_multiple=False,
                            condition=(lambda item: not item.deleted)),
        grids.GridOperation("Delete",
                            allow_multiple=True,
                            condition=(lambda item: not item.deleted)),
        grids.GridOperation("Undelete", condition=(lambda item: item.deleted)),
    ]
    global_actions = [
        grids.GridAction(
            "Reload external service types",
            dict(controller='external_service',
                 action='reload_external_service_types')),
        grids.GridAction(
            "Create new external service",
            dict(controller='external_service',
                 action='create_external_service'))
    ]