class Listing(crud_views.Listing): """Base listing view for all admin models. """ base_template = "admin/base.html" table = listing.Table(columns=[ listing.Column( id="id", name="Id", ), listing.StringPresentationColumn(id="value", name="Value"), listing.ControlsColumn() ]) @property def title(self): return "All {}".format(self.context.title) @view_config(context=ModelAdmin, name="listing", renderer="crud/listing.html", route_name="admin", permission='view') def listing(self): # We override this method just to define admin route_name traversing return super(Listing, self).listing()
class UserCSVListing(CSVListing): """CSV export of the site users.""" title = "users-export" table = listing.Table( columns=[ listing.Column("id"), listing.Column("uuid"), listing.Column("link", getter=_get_user_navigate_target), listing.Column("enabled"), listing.Column("created_at"), listing.Column("last_login_at"), listing.Column("username"), listing.Column("email"), listing.Column("friendly_name"), ] ) def order_query(self, query: Query) -> Query: """Add ordering to an existing SQLAlchemy query. :param query: Base query. :return: Query ordered by created_at. """ return query.order_by(self.get_model().created_at.desc())
class UserListing(admin_views.Listing): """Listing view for Users.""" title = "All users" table = listing.Table(columns=[ listing.Column( "id", "Id", ), listing.Column("friendly_name", "Friendly name"), listing.Column("email", "Email"), listing.ControlsColumn() ]) # Include our CSV export button in the user interface resource_buttons = admin_views.Listing.resource_buttons + [ TraverseLinkButton(id="csv-export", name="CSV Export", view_name="csv-export", permission="view") ] def order_query(self, query): return query.order_by(self.get_model().created_at.desc()) @view_config(context=UserAdmin, route_name="admin", name="listing", renderer="crud/listing.html", permission='view') def listing(self): return super(UserListing, self).listing()
class TagListing(DefaultListing): """Show blog tags.""" table = listing.Table( columns=[ listing.Column("title", "Title", navigate_url_getter=tag_navigate_url_getter), listing.ControlsColumn(name="Admin Actions"), ] )
class PostListing(DefaultListing): """Show all blog posts.""" table = listing.Table( columns=[ listing.Column("title", "Title"), listing.Column("created_at", "Created"), listing.Column("published_at", "Published"), listing.ControlsColumn() ] )
class AssetNetworkListing(DefaultListing): """List all crypto addresses on the site.""" table = listing.Table(columns=[ listing.Column( "id", "Id", ), listing.Column( "name", "Name", getter=lambda v, c, network: network.name), listing.ControlsColumn() ])
class GroupListing(admin_views.Listing): """Listing view for Groups.""" table = listing.Table( columns = [ listing.Column("id", "Id",), listing.Column("name", "Name"), listing.Column("description", "Description"), listing.ControlsColumn() ] ) def order_query(self, query): return query.order_by(self.get_model().id.desc())
class CryptoAddressListing(DefaultListing): """List all crypto addresses on the site.""" table = listing.Table(columns=[ listing.Column("user", "User", getter=find_user_for_address), listing.Column("network", "Network", getter=lambda v, c, address: address.network.name), listing.Column( "address", "Address", getter=lambda v, c, address: bin_to_eth_address(address.address)), listing.Column("eth", "ETH balance", getter=find_eth_balance), listing.ControlsColumn() ])
class CryptoAccountListing(DefaultListing): """User listing modified to show the user hometown based on geoip of last login IP.""" table = listing.Table(columns=[ listing.Column( "id", "Id", ), listing.Column("user", "User", getter=find_user_for_account), listing.Column( "asset", "Asset", getter=lambda v, c, account: account.asset.name), listing.Column("amount", "Amount", getter=lambda v, c, account: account.get_balance()), listing.ControlsColumn() ])
class UserCSVListing(CSVListing): """CSV export of the site users.""" title = "users-export" table = listing.Table(columns=[ listing.Column("id"), listing.Column("uuid"), listing.Column("link", getter=_get_user_navigate_target), listing.Column("enabled"), listing.Column("created_at"), listing.Column("last_login_at"), listing.Column("username"), listing.Column("email"), listing.Column("friendly_name"), ]) def order_query(self, query): return query.order_by(self.get_model().created_at.desc())
class UserListing(admin_views.Listing): """Listing view for Users.""" title = "All users" table = listing.Table( columns = [ listing.Column("id", "Id",), listing.Column("friendly_name", "Friendly name"), listing.Column("email", "Email"), listing.ControlsColumn() ] ) def order_query(self, query): return query.order_by(self.get_model().created_at.desc()) @view_config(context=UserAdmin, route_name="admin", name="listing", renderer="crud/listing.html", permission='view') def listing(self): return super(UserListing, self).listing()
class GroupListing(admin_views.Listing): """Listing view for Groups.""" table = listing.Table( columns=[ listing.Column("id", "Id",), listing.Column("name", "Name"), listing.Column("description", "Description"), listing.ControlsColumn() ] ) def order_query(self, query: Query) -> Query: """Add ordering to an existing SQLAlchemy query. :param query: Base query. :return: Query ordered by id descending. """ return query.order_by(self.get_model().id.desc())
class AssetListing(adminbaseviews.Listing): table = listing.Table(columns=[ # listing.Column("id", "Id",), listing.Column("name", "Name", getter=lambda v, c, asset: asset.name), listing.Column("description", "Description", getter=lambda v, c, asset: asset.name), # Convert between binary storage and human readable hex presentation listing.Column("address", "Address", getter=lambda v, c, asset: asset.external_id and bin_to_eth_address(asset.external_id or "")), listing.ControlsColumn() ]) def order_query(self, query: Query): """Sort the query.""" return query.order_by(Asset.name)
class UserAccountListing(DefaultListing): """User listing modified to show the user hometown based on geoip of last login IP.""" table = listing.Table(columns=[ listing.Column( "id", "Id", ), listing.Column("user", "Owner", getter=get_user_for_account, navigate_url_getter=get_user_admin_link), listing.Column("asset", "Asset", getter=get_asset_for_account), listing.Column("amount", "Amount", getter=get_amount_for_account), listing.ControlsColumn() ]) @view_config(context=admins.UserAccountAdmin, name="listing", renderer="admin/account_listing.html", route_name="admin", permission='view') def listing(self): return super().listing()