def make_ui_table(file_path: str, name: str, n_rows: int = 20, first_col: str = None): """Creates a ui.table object from a csv file""" df = pd.read_csv(file_path) df = df.replace(np.nan, '', regex=True) n_rows = min(n_rows, df.shape[0]) columns = [ ui.table_column(name=str(x), label=str(x), sortable=True) for x in df.columns.values ] if first_col is not None: columns[0] = ui.table_column(name=first_col, label=first_col, sortable=True) table = ui.table(name=name, columns=columns, rows=[ ui.table_row(name=str(i), cells=[ str(df[col].values[i]) for col in df.columns.values ]) for i in range(n_rows) ]) return table
def dai_instances_table(dai_instances: list): # dai instances in ui.table return ui.table( name='table_dai', columns=[ ui.table_column(name='id', label='Id', min_width='50px', max_width='51px', link=False), ui.table_column(name='name', label='Name', link=False), ui.table_column(name='status', label='Status', cell_type=ui.icon_table_cell_type(color='#CDDD38'), link=False), ui.table_column(name='description', label='Description', link=False), ui.table_column(name='version', label='Version', link=False) ], rows=[ ui.table_row(str(i), [ str(dai_instances[i]['id']), dai_instances[i]['name'], ICON_MAP[dai_instances[i]['status']], dai_instances[i]['status'], dai_instances[i]['version'] ]) for i in range(len(dai_instances)) ])
def render_customer_details_table(q: Q, df, row): q.page.add( 'risk_table_row', ui.form_card(box='risk_table_selected', items=[ ui.table(name='risk_table_row', columns=[ ui.table_column(name="attribute", label="Attribute", sortable=False, searchable=False, max_width='100'), ui.table_column(name="value", label="Value", sortable=False, searchable=False, max_width='100') ], rows=get_transformed_df_rows( q, df.loc[[row]]), groupable=False, resettable=False, multiple=False, height='100%') ]))
def ui_table_from_df(df: pd.DataFrame, name: str = '', sortables: list = None, filterables: list = None, searchables: list = None, min_widths: dict = None, max_widths: dict = None, multiple: bool = False, link_col: str = None, height: str = '500px') -> ui.table: """ Convert a dataframe into Q ui.table format. """ if not sortables: sortables = [] if not filterables: filterables = [] if not searchables: searchables = [] if not min_widths: min_widths = {} if not max_widths: max_widths = {} columns = [ ui.table_column( name=str(x), label=str(x), sortable=True if x in sortables else False, filterable=True if x in filterables else False, searchable=True if x in searchables else False, min_width=min_widths[x] if x in min_widths.keys() else None, max_width=max_widths[x] if x in max_widths.keys() else None, link=True if x == link_col else False) for x in df.columns.values ] try: table = ui.table(name=name, columns=columns, rows=[ ui.table_row(name=str(i), cells=[ str(df[col].values[i]) for col in df.columns.values ]) for i in range(df.shape[0]) ], multiple=multiple, height=height) except Exception: table = ui.table( name=name, columns=[ui.table_column('x', 'x')], rows=[ui.table_row(name='ndf', cells=[str('No data found')])]) return table
def get_column_headers_for_df(df, searchable): columns = [ ui.table_column(name=column, label=column, sortable=True, searchable=searchable, max_width='300') for column in df.columns ] columns += [ ui.table_column(name='status', label='Status', cell_type=ui.icon_table_cell_type()) ] return columns
async def serve(q: Q): if not q.client.initialized: q.page['form'] = ui.form_card( box='1 1 -1 11', items=[ ui.textbox(name='search', label='Search', placeholder='Enter a keyword...', trigger=True), ui.table(name='issues', columns=[ ui.table_column(name=name, label=name) for name in column_names ], rows=df_to_rows(addresses)) ]) q.client.initialized = True else: items = q.page['form'].items search_box = items[0].textbox table = items[1].table term: str = q.args.search term = term.strip() if term else '' search_box.value = term table.rows = df_to_rows( search_df(addresses, term) if len(term) else addresses) await q.page.save()
async def render_customer_selector(q: Q): clear_page(q) columns = [ ui.table_column(name=column, label=column, sortable=True, searchable=True) for column in q.app.customer_df.columns ] rows = [ ui.table_row(name=str(index), cells=row.tolist()) for index, row in q.app.customer_df.applymap(str).iterrows() ] q.client.cards.add('customer_table') q.page['customer_table'] = ui.form_card( box='customer_table', items=[ ui.message_bar(text='Click "Status" to review a customer', type='info'), ui.table( name='customer_table', columns=columns, rows=rows, groupable=True, multiple=False, ) ])
def get_wave_table_columns(self): """ Get columns for attributes table. Returns: list: List of Wave table columns """ names = { 'i': 'id', 'text': 'token', 'lemma_': 'lemma', 'norm_': 'norm', 'ent_type_': 'ent', 'ent_iob_': 'iob', 'pos_': 'pos', 'tag_': 'tag', 'dep_': 'dep', 'is_alpha': 'alpha', 'is_ascii': 'ascii', 'is_digit': 'digit', 'is_lower': 'lower', 'is_upper': 'upper', 'is_title': 'title', 'is_punct': 'punct', 'morph': 'morph' } searchables = ['text', 'lemma', 'norm'] filterables = self.token_attributes min_widths = { 'i': '40px', 'text': '80px', 'lemma_': '80px', 'norm_': '80px', 'ent_type_': '50px', 'ent_iob_': '40px', 'pos_': '50px', 'tag_': '50px', 'dep_': '70px', 'is_alpha': '60px', 'is_ascii': '50px', 'is_digit': '50px', 'is_lower': '60px', 'is_upper': '60px', 'is_title': '50px', 'is_punct': '60px', 'morph': '70px', } return [ ui.table_column( name=names[x], label=names[x], sortable=False, searchable=True if x in searchables else False, filterable=True if x in filterables else False, link=False, min_width=min_widths[x] if x in min_widths.keys() else None) for x in self.token_attributes ]
def render_leaderboard(q: Q): logger.debug("Creating leaderboard") for c in q.client.cards: del q.page[c] # Create columns for our issue table. columns = [ ui.table_column(name="user", label="User"), ui.table_column(name="total", label="Total Count", sortable=True, data_type="number"), ] + [ ui.table_column( name=t.common_name, label=t.common_name.title(), sortable=True, data_type="number", ) for t in q.client.trees.trees ] rows = [] for filename in os.listdir(q.user.user.user_dir): trees = Trees(file=os.path.join(q.user.user.user_dir, filename)) rows += [ ui.table_row( name="row", cells=[q.user.user.name, str(trees.get_total_trees())] + [str(t.count) for t in trees.trees], ) ] table = ui.table( name="tree_table", columns=columns, rows=rows, downloadable=True, ) q.page["leaderboard"] = ui.form_card(box=ui.boxes(ui.box("body"), ui.box("top"), ui.box("top")), items=[table]) q.client.cards.append("leaderboard")
def make_ui_table(file_path: str, n_rows: int, name: str): """Creates a ui.table object from a csv file""" df = pd.read_csv(file_path) n_rows = min(n_rows, df.shape[0]) table = ui.table( name=name, columns=[ui.table_column(name=str(x), label=str(x), sortable=True) for x in df.columns.values], rows=[ui.table_row(name=str(i), cells=[str(df[col].values[i]) for col in df.columns.values]) for i in range(n_rows)] ) return table
def make_table(q: Q): n = 10 q.client.df = pd.DataFrame({ 'length': np.random.rand(n), 'width': np.random.rand(n), 'data_type': np.random.choice(a=['Train', 'Test'], size=n, p=[0.8, 0.2]) }) table = ui.table(name='my_table', columns=[ ui.table_column(name=x, label=x) for x in q.client.df.columns.tolist() ], rows=[ ui.table_row(name=i, cells=q.client.df.values[i].tolist()) for i in range(n) ]) q.page['show_table'] = ui.form_card(box='1 1 6 6', items=[table])
# Create some issues issues = [ Issue(text=fake.sentence(), status=('Closed' if i % 2 == 0 else 'Open'), progress=random.random(), icon=('BoxCheckmarkSolid' if random.random() > 0.5 else 'BoxMultiplySolid'), state=('RUNNING' if random.random() > 0.5 else 'DONE,SUCCESS'), created=fake.iso8601()) for i in range(100) ] # Create columns for our issue table. columns = [ ui.table_column(name='text', label='Issue', sortable=True, searchable=True, max_width='300'), ui.table_column(name='status', label='Status', filterable=True), ui.table_column(name='done', label='Done', cell_type=ui.icon_table_cell_type()), ui.table_column(name='views', label='Views', sortable=True, data_type='number'), ui.table_column(name='progress', label='Progress', cell_type=ui.progress_table_cell_type()), ui.table_column(name='tag', label='State',
l_suppliers = df_su.values.tolist() print(l_suppliers) suppliers = [ Suppliers(supplier[0], supplier[1], supplier[2]) for supplier in l_suppliers ] except: print('suppliers.csv not found') ############################## DEFINE COLUMNS FOR EACH SECTION # !!! # Create columns for our product table. column_product_table = [ ui.table_column(name='product', label='Product', sortable=True, searchable=True), ui.table_column(name='manufacturer', label='Manufacturer', sortable=True, searchable=True), ui.table_column(name='supplier', label='Supplier', sortable=True, searchable=True) # ui.table_column(name='selling_price', label='Selling Price', sortable=True, data_type='number'), # ui.table_column(name='uom', label='Unit of Measurement') # ui.table_column(name='product_type', label='Type', sortable=True, searchable=True, ), # ui.table_column(name='product_subtype', label='Subtype', sortable=True, searchable=True, ), # ui.table_column(name='module', label='module', sortable=True, searchable=True, ), # ui.table_column(name='brand', label='Brand', sortable=True, searchable=True, ),
async def serve(q: Q): q.page['example'] = ui.form_card(box='1 1 4 10', items=[ ui.text_xl(content='Extra-large text, for headings.'), ui.text_l(content='Large text, for sub-headings.'), ui.text_m(content='Body text, for paragraphs and other content.'), ui.text_s(content='Small text, for small print.'), ui.text_xs(content='Extra-small text, for really small print.'), ui.separator(label='A separator sections forms'), ui.progress(label='A progress bar'), ui.progress(label='A progress bar'), ui.message_bar(type='success', text='Message bar'), ui.textbox(name='textbox', label='Textbox'), ui.label(label='Checkboxes'), ui.checkbox(name='checkbox1', label='A checkbox'), ui.checkbox(name='checkbox1', label='Another checkbox'), ui.checkbox(name='checkbox1', label='Yet another checkbox'), ui.toggle(name='toggle', label='Toggle'), ui.choice_group(name='choice_group', label='Choice group', choices=[ ui.choice(name=x, label=x) for x in ['Egg', 'Bacon', 'Spam'] ]), ui.checklist(name='checklist', label='Checklist', choices=[ ui.choice(name=x, label=x) for x in ['Egg', 'Bacon', 'Spam'] ]), ui.dropdown(name='dropdown', label='Dropdown', choices=[ ui.choice(name=x, label=x) for x in ['Egg', 'Bacon', 'Spam'] ]), ui.dropdown(name='dropdown', label='Multi-valued Dropdown', values=[], choices=[ ui.choice(name=x, label=x) for x in ['Egg', 'Bacon', 'Spam'] ]), ui.combobox(name='combobox', label='Combobox', choices=['Choice 1', 'Choice 2', 'Choice 3']), ui.slider(name='slider', label='Slider'), ui.range_slider(name='range_slider', label='Range slider', max=99), ui.spinbox(name='spinbox', label='Spinbox'), ui.date_picker(name='date_picker', label='Date picker'), ui.color_picker(name='color_picker', label='Color picker'), ui.buttons([ ui.button(name='primary_button', label='Primary', primary=True), ui.button(name='standard_button', label='Standard'), ui.button(name='standard_disabled_button', label='Standard', disabled=True), ]), ui.file_upload(name='file_upload', label='File upload'), ui.table(name='table', columns=[ ui.table_column(name='col1', label='Column 1'), ui.table_column(name='col2', label='Column 2'), ], rows=[ ui.table_row(name='row1', cells=['Text A', 'Text B']), ui.table_row(name='row2', cells=['Text C', 'Text D']), ui.table_row(name='row3', cells=['Text E', 'Text F']), ]), ui.link(label='Link'), ui.tabs(name='tabs', items=[ ui.tab(name='email', label='Mail', icon='Mail'), ui.tab(name='events', label='Events', icon='Calendar'), ui.tab(name='spam', label='Spam'), ]), ui.expander(name='expander', label='Expander'), ui.frame(path='https://example.com'), ui.markup(content=html), ui.template( content=menu, data=pack(dict(dishes=[ dict(name='Spam', price='$2.00'), dict(name='Ham', price='$3.45'), dict(name='Eggs', price='$1.75'), ])) ), ui.picker(name='picker', label='Picker', choices=[ ui.choice('choice1', label='Choice 1'), ui.choice('choice2', label='Choice 2'), ui.choice('choice3', label='Choice 3'), ]), ui.stepper(name='stepper', items=[ ui.step(label='Step 1', icon='MailLowImportance'), ui.step(label='Step 2', icon='TaskManagerMirrored'), ui.step(label='Step 3', icon='Cafe'), ]), ui.visualization( plot=ui.plot([ui.mark(type='interval', x='=product', y='=price', y_min=0)]), data=data(fields='product price', rows=[(c, x) for c, x, _ in [f.next() for _ in range(n)]], pack=True), ), ui.vega_visualization( specification=spec, data=data(fields=["a", "b"], rows=[ ["A", rnd()], ["B", rnd()], ["C", rnd()], ["D", rnd()], ["E", rnd()], ["F", rnd()], ["G", rnd()], ["H", rnd()], ["I", rnd()] ], pack=True), ), ui.button(name='show_inputs', label='Submit', primary=True), ]) await q.page.save()
_id = 0 class Issue: def __init__(self, text: str): global _id _id += 1 self.id = f'I{_id}' self.text = text # Create some issues issues = [Issue(text=fake.sentence()) for i in range(10)] # Create columns for our issue table. columns = [ui.table_column(name='text', label='Issue', min_width='300px')] @app('/demo') async def serve(q: Q): if q.args.show_inputs: q.page['example'].items = [ ui.text(f'selected={q.args.issues}'), ui.button(name='show_form', label='Back', primary=True), ] else: q.page['example'] = ui.form_card( box='1 1 -1 11', items=[ ui.table(name='issues', columns=columns,
_id += 1 self.id = f'I{_id}' self.text = text self.status = status self.views = 0 # Create some issues issues = [Issue(text=fake.sentence(), status='Open') for i in range(12)] # Build a lookup of issues for convenience issue_lookup = {issue.id: issue for issue in issues} # Create columns for our issue table. columns = [ ui.table_column(name='text', label='Issue'), ui.table_column(name='status', label='Status'), ui.table_column(name='views', label='Views'), ] def make_issue_table(allow_multiple_selection=False): return ui.table( name='issues', columns=columns, rows=[ui.table_row(name=issue.id, cells=[issue.text, issue.status, str(issue.views)]) for issue in issues], multiple=allow_multiple_selection ) async def edit_multiple(q: Q):
class Issue: def __init__(self, text: str, tag: str): global _id _id += 1 self.id = f'I{_id}' self.text = text self.tag = tag # Create some issues issues = [Issue(text=fake.sentence(), tag=('FAIL' if i % 2 == 0 else 'DONE,SUCCESS')) for i in range(10)] columns = [ ui.table_column(name='text', label='Issue', min_width='400px'), ui.table_column(name='tag', label='Badge', cell_type=ui.tag_table_cell_type(name='tags', tags=[ ui.tag(label='FAIL', color='$red'), ui.tag(label='DONE', color='#D2E3F8', label_color='#053975'), ui.tag(label='SUCCESS', color='$mint'), ])), ] @app('/demo') async def serve(q: Q): q.page['example'] = ui.form_card(box='1 1 6 7', items=[ ui.table( name='issues', columns=columns, rows=[ui.table_row(name=issue.id, cells=[issue.text, issue.tag]) for issue in issues],
async def responsive_layout(q: Q): if not q.user.columns: q.user.columns = [ ui.table_column(name='Index', label='Index', searchable=True, sortable=True, data_type='number'), ui.table_column(name='Started', label='Started', searchable=True), ui.table_column(name='Ended', label='Ended', searchable=True), ui.table_column(name='Duration', label='Duration (mins)', data_type='number'), ui.table_column(name='Scores', label='Scores', data_type='number'), ] if not q.client.LB_columns: q.client.LB_columns = [ ui.table_column(name='User', label='User', searchable=True, max_width='100px'), ui.table_column(name='Scores', label='Scores', searchable=True, max_width='100px', sortable=True), ] q.page['meta'] = ui.meta_card( box='', title='Streak Counter', layouts=[ ui.layout( # If the viewport width >= 0: breakpoint='xs', zones=[ # 80px high header ui.zone('header', size='80px'), # Use remaining space for content ui.zone('content') ]), ui.layout( # If the viewport width >= 768: breakpoint='m', zones=[ # 80px high header ui.zone('header', size='80px'), # Use remaining space for body ui.zone( 'body', direction=ui.ZoneDirection.ROW, zones=[ # 250px wide sidebar ui.zone('sidebar', size='250px'), # Use remaining space for content ui.zone('content'), ]), ui.zone('footer'), ]), ui.layout( # If the viewport width >= 1200: breakpoint='xl', width='1200px', zones=[ # 80px high header ui.zone('header', size='80px'), # Use remaining space for body ui.zone( 'body', direction=ui.ZoneDirection.ROW, zones=[ # 300px wide sidebar ui.zone('sidebar', size='300px'), # Use remaining space for other widgets ui.zone( 'other', zones=[ # Use one half for charts ui.zone('charts', direction=ui.ZoneDirection.ROW), # Use other half for content ui.zone('content', size='500px'), ]), ]), ui.zone('footer'), ]) ]) q.page['header'] = ui.header_card( # Place card in the header zone, regardless of viewport size. box='header', title='Code Streak Counter', subtitle='Count your programming Streak while staying healthy !!!', ) q.page['LeaderBoard'] = ui.form_card( # If the viewport width >= 0, place in content zone. # If the viewport width >= 768, place in sidebar zone. # If the viewport width >= 1200, place in sidebar zone. box=ui.boxes('content', 'sidebar', 'sidebar'), # title='Leader Board', items=[ ui.text_l(content=f"Hi {q.auth.username.capitalize()}..!"), ui.text_xl( content= f"Your Total Score: {q.user.stop_watch.df['Scores'].sum()}"), ui.table( name='leaderboard', columns=q.client.LB_columns, rows=[ ui.table_row(name=user, cells=[user, str(score)]) for user, score in q.app.lb_dict.items() ], groupable=False, downloadable=True, resettable=False, height='425px', ), ui.link(name='logout', label='Log Out', button=True, path=f'/_logout', target='_current') ], ) q.page['stopwatch'] = ui.form_card( box=ui.boxes( # If the viewport width >= 0, place as second item in content zone. ui.box(zone='content', order=2), # If the viewport width >= 768, place in content zone. 'content', # If the viewport width >= 1200, place as first item in charts zone, use 2 parts of available space. ui.box(zone='charts', order=1, size=2), ), items=[ ui.text_xl( content= f"<h1><center>{str(q.user.stop_watch.minutes).zfill(2)} : {str(q.user.stop_watch.seconds).zfill(2)}</center></h1>" ), ui.text_l(content=f"<center>Lets crack some code!</center>"), ui.buttons([ ui.button(name='start', label='Start', primary=True), ui.button(name='stop', label='Stop', primary=False) ], justify='center') ], ) q.page['UserStreaks'] = ui.markdown_card( box=ui.boxes( # If the viewport width >= 0, place as third item in content zone. ui.box(zone='content', order=3), # If the viewport width >= 768, place as second item in content zone. ui.box(zone='content', order=2), # If the viewport width >= 1200, place as second item in charts zone, use 1 part of available space. ui.box(zone='charts', order=2, size=1), ), title='User Streaks', content="""=Last Streak Started: {{streak_start}} <p data-test='UserStreaks_Last_Ended'>Last Streak Ended: {{streak_end}}</p> <p data-test='UserStreaks_Total_Streaks'>Total Streaks: {{total_streaks}}</p> Total Coding Time: {{total_time}} """, data=dict(streak_start=q.user.stop_watch.last_start, streak_end=q.user.stop_watch.last_stop, total_streaks=q.user.stop_watch.total_streaks, total_time=f"{str(q.user.stop_watch.total_hours).zfill(2)} :\ {str(q.user.stop_watch.total_minutes).zfill(2)} : \ {str(q.user.stop_watch.total_seconds).zfill(2)}")) q.page['history'] = ui.form_card( box=ui.boxes( # If the viewport width >= 0, place as fourth item in content zone. ui.box(zone='content', order=4), # If the viewport width >= 768, place as third item in content zone. ui.box(zone='content', order=3), # If the viewport width >= 1200, place in content zone. 'content'), items=[ ui.table(name='streaks_table', columns=q.user.columns, rows=[ ui.table_row(name=str(row.Index + 1), cells=[ str(row.Index + 1), row.Started, row.Ended, str(row.Duration), str(row.Scores) ]) for row in q.user.stop_watch.df.itertuples() ], groupable=False, downloadable=True, resettable=False, height='425px') ], title='History', ) q.page['footer'] = ui.footer_card(box='footer', caption='(c) 2021 H2O.ai ')
from_sid=item['from_sid']['S'], quote=item['quote']['S'], author=item['author']['S'], quote_category=item['quote_category']['S'], vote=item['vote']['S'], quote_length=item['quote_length']['N'], num_unique_words=item['num_unique_words']['N'], ) for item in data ] print(issues) # # Create columns for our issue table. columns = [ ui.table_column(name='to_sid', label='To_Sid', sortable=False, searchable=True, max_width='300'), ui.table_column(name='from_sid', label='From_Sid', sortable=False), ui.table_column(name='quote', label='Quote', filterable=True), ui.table_column(name='author', label='Author', filterable=True), ui.table_column(name='quote_category', label='Category', sortable=True, filterable=True), ui.table_column(name='vote', label='Vote', sortable=True, filterable=True), ui.table_column(name='quote_length', label='Quote_Length', sortable=True, data_type='number'), ui.table_column(name='num_unique_words', label='Unique_Words', sortable=True, data_type='number') ] sample_markdown = ''' # Welcome to Moti Me Home Page '''
async def show_leaderboard(q: Q): columns = [ ui.table_column( name='name', label='Name', sortable=True, searchable=False, max_width='230', data_type='string', link=False, ), ui.table_column( name='number', label='Number', sortable=True, max_width='100', data_type='number', ), ui.table_column( name='num_of_guesses', label='# of Guesses', sortable=True, max_width='120', data_type='number', ), ui.table_column( name='game_time', label='Time (s)', sortable=True, max_width='160', data_type='number', ), ] scores = [ ui.table_row( name=game.game_id, cells=[ q.app.players[game.player_id].name, str(game.number), str(len(game.guesses)), str(game.time_seconds()), ], ) for game in q.app.games.values() ] leaderboard = ui.table( name='leaderboard', columns=columns, rows=scores, groupable=False, downloadable=False, resettable=False, height='600px', ) del q.page['starting_game'] q.page['leaderboard'] = ui.form_card( box='3 2 5 9', items=[ ui.label('Scores'), leaderboard, ui.text_xs('Рађ'), ui.buttons( items=[ ui.button(name='start_game', label='Play', primary=True), ui.button(name='leaderboard', label='Refresh', primary=True), ui.button( name='private_leaderboard', label='Show my games only', primary=True, ), ], justify='center', ), ], ) await q.page.save()
async def render_customer_page(q: Q): clear_page(q) row_index = int(q.args.customer_table[0]) customer_row = q.app.customer_df.loc[row_index] score = q.app.predictions_df.loc[row_index] approve = bool(score < APPROVAL_THRESHOLD) contribs = q.app.contributions_df.loc[row_index].drop('BiasTerm') q.client.selected_customer_id = customer_row['ID'] # details q.client.cards.add('customer_features') q.page['customer_features'] = ui.form_card( box='customer_features', items=[ ui.table(name='customer_features', columns=[ ui.table_column(name='attribute', label='Attribute', sortable=False, searchable=False, max_width='100'), ui.table_column(name='value', label='Value', sortable=False, searchable=False, max_width='100') ], rows=[ ui.table_row(name=index, cells=[index, row]) for index, row in customer_row.map(str).iteritems() ], groupable=False, resettable=False, multiple=False, height='525px') ]) # summary top_feature = contribs.idxmin(axis=1) if approve else contribs.idxmax( axis=1) explanation_data = { 'will_or_will_not': 'will' if approve else 'will not', 'top_contributing_feature': top_feature, 'value_of_top_contributing_feature': str(customer_row[top_feature]), 'accept_or_reject': 'approve' if approve else 'reject', } explanation = ( "- This customer **{{will_or_will_not}}** most probably settle the next month credit card balance.\n" "- Having a **{{top_contributing_feature}}** of **{{value_of_top_contributing_feature}}** is the top reason for that.\n" "- It's recommended to **{{accept_or_reject}}** this customer.") q.client.cards.add('customer_risk_explanation') q.page['customer_risk_explanation'] = ui.markdown_card( box='customer_risk_explanation', title='Summary on Customer', content='=' + explanation, data=explanation_data, ) # shap plot shap_values = list(zip(contribs.index, contribs)) shap_values.sort(key=lambda x: x[1]) q.client.cards.add('customer_shap_plot') q.page['customer_shap_plot'] = ui.plot_card( box='customer_shap_plot', title='Effectiveness of each attribute on defaulting next payment', data=data(['label', 'value'], rows=shap_values), plot=ui.plot([ ui.mark(type='interval', x='=value', x_title='Feature Contributions', y='=label') ])) # approve/reject buttons q.client.cards.add('button_group') q.page['button_group'] = ui.form_card(box='button_group', items=[ ui.buttons([ ui.button(name='approve', label='Approve', primary=approve), ui.button( name='reject', label='Reject', primary=not approve), ]) ])
# Create some issues issues = [ Issue(text=fake.sentence(), status=('Closed' if i % 2 == 0 else 'Open'), progress=random.random(), icon=('BoxCheckmarkSolid' if random.random() > 0.5 else 'BoxMultiplySolid'), notifications=('Off' if random.random() > 0.5 else 'On'), created=fake.iso8601()) for i in range(100) ] # Create columns for our issue table. columns = [ ui.table_column(name='text', label='Issue', sortable=True, searchable=True, max_width='300'), ui.table_column(name='status', label='Status', filterable=True), ui.table_column(name='notifications', label='Notifications', filterable=True), ui.table_column(name='done', label='Done', cell_type=ui.icon_table_cell_type()), ui.table_column(name='views', label='Views', sortable=True, data_type='number'), ui.table_column(name='progress', label='Progress',
async def show_private_leaderboard(q: Q): columns = [ ui.table_column( name='game_id', label='Game #', sortable=False, searchable=False, max_width='150', data_type='string', link=False, ), ui.table_column( name='number', label='Number', sortable=True, max_width='90', data_type='number', ), ui.table_column( name='num_of_guesses', label='# of Guesses', sortable=True, max_width='120', data_type='number', ), ui.table_column( name='status', label='Status', sortable=False, filterable=True, max_width='90', data_type='string', cell_type=ui.icon_table_cell_type(), ), ui.table_column( name='game_time', label='Time (s)', sortable=True, max_width='150', data_type='number', ), ] scores = [ ui.table_row( name=game.game_id, cells=[ str(idx), str(game.number), str(len(game.guesses)), 'MedalSolid' if game.status == 'done' else 'Running', str(game.time_seconds()), ], ) for idx, game in enumerate(q.user.player.games.values(), 1) ] leaderboard = ui.table( name='leaderboard', columns=columns, rows=scores, groupable=False, downloadable=False, resettable=False, height='600px', ) del q.page['starting_game'] q.page['leaderboard'] = ui.form_card( box='3 2 5 9', items=[ ui.label('Scores from your games'), leaderboard, ui.text_xs('Рађ'), ui.buttons( items=[ ui.button(name='start_game', label='Play', primary=True), ui.button(name='leaderboard', label='Show all games', primary=True), ], justify='center', ), ], ) await q.page.save()
# Create some issues issues = [ Issue(text=fake.sentence(), status=('Closed' if i % 2 == 0 else 'Open'), progress=random.random(), icon=('BoxCheckmarkSolid' if random.random() > 0.5 else 'BoxMultiplySolid'), notifications=('Off' if random.random() > 0.5 else 'On')) for i in range(100) ] # Create columns for our issue table. columns = [ ui.table_column( name='text', label='Issue', sortable=True, ), ui.table_column(name='status', label='Status'), ui.table_column(name='notifications', label='Notifications'), ui.table_column(name='done', label='Done', cell_type=ui.icon_table_cell_type()), ui.table_column(name='views', label='Views', sortable=True), ui.table_column(name='progress', label='Progress', cell_type=ui.progress_table_cell_type()), ] @app('/demo')
async def serve(q: Q): if not q.client.initialized: image = 'https://images.pexels.com/photos/220453/pexels-photo-220453.jpeg?auto=compress&h=750&w=1260' f = FakeCategoricalSeries() q.client.primary = '#000000' q.client.page = '#e2e2e2' q.client.card = '#ffffff' q.client.text = '#000000' q.page['meta'] = ui.meta_card( box='', theme='custom', layouts=[ ui.layout(breakpoint='xs', zones=[ ui.zone('header'), ui.zone('content', direction=ui.ZoneDirection.ROW, zones=[ ui.zone('colors', size='340px'), ui.zone('preview') ]), ui.zone('footer') ]) ]) q.page['header'] = ui.header_card(box='header', title='Theme generator', subtitle='Color your app easily', icon='Color', icon_color='$card') q.page['form'] = ui.form_card(box='colors', items=[ ui.color_picker( name='primary', label='Primary', trigger=True, alpha=False, inline=True, value=q.client.primary), ui.color_picker(name='text', label='Text', trigger=True, alpha=False, inline=True, value=q.client.text), ui.color_picker(name='card', label='Card', trigger=True, alpha=False, inline=True, value=q.client.card), ui.color_picker(name='page', label='Page', trigger=True, alpha=False, inline=True, value=q.client.page), ui.text_xl('Check contrast'), get_contrast('text', 'card', q), get_contrast('card', 'primary', q), get_contrast('text', 'page', q), get_contrast('page', 'primary', q), ui.text_xl('Copy code'), ui.frame(content=get_theme_code(q), height='180px'), ]) q.page['sample'] = ui.form_card( box='preview', items=[ ui.text_xl(content='Sample App to show colors'), ui.progress(label='A progress bar'), ui.inline([ ui.checkbox(name='checkbox1', label='A checkbox', value=True), ui.checkbox(name='checkbox2', label='Another checkbox'), ui.checkbox(name='checkbox3', label='Yet another checkbox'), ui.toggle(name='toggle', label='Toggle', value=True), ]), ui.inline([ ui.date_picker(name='date_picker', label='Date picker'), ui.picker(name='picker', label='Picker', choices=[ ui.choice('choice1', label='Choice 1'), ui.choice('choice2', label='Choice 2'), ui.choice('choice3', label='Choice 3'), ]), ui.combobox(name='combobox', label='Combobox', choices=['Choice 1', 'Choice 2', 'Choice 3']), ui.persona(title='John Doe', subtitle='Data Scientist', size='s', image=image), ]), ui.slider(name='slider', label='Slider', value=70), ui.link(label='Link'), ui.inline(justify='between', items=[ ui.stepper(name='stepper', width='500px', items=[ ui.step(label='Step 1', icon='MailLowImportance'), ui.step( label='Step 2', icon='TaskManagerMirrored'), ui.step(label='Step 3', icon='Cafe'), ]), ui.tabs(name='menu', value='email', items=[ ui.tab(name='email', label='Mail', icon='Mail'), ui.tab(name='events', label='Events', icon='Calendar'), ui.tab(name='spam', label='Spam'), ]), ]), ui.inline(items=[ ui.table( name='table', width='50%', columns=[ ui.table_column( name='name', label='Name', min_width='80px'), ui.table_column(name='surname', label='Surname', filterable=True), ui.table_column(name='age', label='Age', sortable=True), ui.table_column( name='progress', label='Progress', cell_type=ui.progress_table_cell_type( color='$themePrimary')), ], rows=[ ui.table_row(name='row1', cells=['John', 'Doe', '25', '0.90']), ui.table_row(name='row2', cells=['Ann', 'Doe', '35', '0.75']), ui.table_row( name='row3', cells=['Casey', 'Smith', '40', '0.33']), ], height='330px', ), ui.visualization( width='50%', plot=ui.plot([ ui.mark(type='interval', x='=product', y='=price', y_min=0) ]), data=data(fields='product price', rows=[(c, x) for c, x, _ in [f.next() for _ in range(20)]], pack=True), ), ]), ui.buttons([ ui.button(name='primary_button', label='Primary', primary=True), ui.button(name='standard_button', label='Standard'), ui.button(name='standard_disabled_button', label='Disabled', disabled=True), ui.button(name='icon_button', icon='Heart', caption='Tooltip text'), ]), ]) q.page['footer'] = ui.footer_card( box='footer', caption='(c) 2021 H2O.ai. All rights reserved.') q.client.themes = [ ui.theme(name='custom', text=q.client.text, card=q.client.card, page=q.client.page, primary=q.client.primary) ] q.client.initialized = True if q.args.primary: q.client.themes[0].primary = q.args.primary q.client.primary = q.args.primary if q.args.text: q.client.themes[0].text = q.args.text q.client.text = q.args.text if q.args.card: q.client.themes[0].card = q.args.card q.client.card = q.args.card if q.args.page: q.client.themes[0].page = q.args.page q.client.page = q.args.page q.page['meta'].themes = q.client.themes q.page['form'].items[5] = get_contrast('text', 'card', q) q.page['form'].items[6] = get_contrast('card', 'primary', q) q.page['form'].items[7] = get_contrast('text', 'page', q) q.page['form'].items[8] = get_contrast('page', 'primary', q) q.page['form'].items[10].frame.content = get_theme_code(q) await q.page.save()