def gera_botoes_linha_2(): """Gera uma lista de fragmentos de HTML com os botões da linha 2 do menu geral. Estes botões são mostrados apenas se o usuário está logado e é um administrador.""" ht_input = html_input.gera(None, "text", "id", None, None, True, True, "Id do objeto", None) ht_bt_submit = html_botao_submit.gera("Checar Objeto", "ver_objeto", None, '#ffdd22') form_content = \ ht_input + \ ht_bt_submit ht_input2 = html_input.gera(None, "text", "passageiro", None, None, True, True, "Nome ou documento", None) ht_bt_submit2 = html_botao_submit.gera("Buscar passageiro", "buscar_compras", None, '#ffdd22') form_content2 = \ ht_input2 + \ ht_bt_submit2 botoes = ( html_botao_simples.gera("Acrescentar trecho", "solicitar_pag_acrescentar_trecho", None, '#ffdd22'), html_botao_simples.gera("Trafego", "comando_relatorio_de_trafego", None, '#FF00FF'), html_form.gera(form_content), html_form.gera(form_content2) # html_botao_simples.gera("Alterar trecho", "solicitar_pag_alterar_trecho", None, '#ffdd22'), # html_form_passageiros.gera(), # html_form_buscar_objeto.gera(), ) return botoes
def gera(): linhas = [].copy() ht_rotulo = html_label.gera("E-mail", ": ") ht_campo = html_input.gera(None, "text", "email", None, None, True, True, "nome@provedor", None) linhas.append(( ht_rotulo, ht_campo, )) ht_rotulo = html_label.gera("Senha", ": ") ht_campo = html_input.gera(None, "password", "senha", None, None, True, True, None, None) linhas.append(( ht_rotulo, ht_campo, )) # Monta a tabela com os fragmentos HTML: ht_table = html_table.gera(linhas, None) ht_bt_login = html_botao_submit.gera("Entrar", 'fazer_login', None, '#55ee55') ht_campos = \ ht_table + \ ht_bt_login ht = html_form.gera(ht_campos) return ht
def gera(atrs, admin): # Dados para {html_form_table.gera} # {(rotulo,tipo,chave,dica,visivel,editavel,obrigatorio)} dados_linhas = (( "Usuário", "text", "id_usuario", "U-xxxxxxxx", True, True, True, ), ) ht_table = html_form_table.gera(dados_linhas, atrs) ht_submit = html_botao_submit.gera("Buscar", "buscar_compras", None, '#55ee55') ht_cancel = html_botao_simples.gera("Cancelar", "principal", None, '#ff2200') ht_conteudo = \ ht_table + \ ht_submit + \ ht_cancel return html_form.gera(ht_conteudo)
def gera(): linhas = [].copy() ht_rotulo = html_label.gera("Origem", ": ") ht_campo = html_input.gera(None, "text", "origem", None, None, True, True, "VCP", None) linhas.append((ht_rotulo, ht_campo,)) ht_rotulo = html_label.gera("Data mínima de partida", ": ") ht_campo = html_input.gera(None, "text", "dia_min", None, None, True, True, "aaaa-mm-dd", None) ht_campo2 = html_input.gera(None, "text", "hora_min", None, None, True, True, "HH:MM", None) ht_rotulo2 = html_label.gera("UTC", "") linhas.append((ht_rotulo, ht_campo, ht_campo2, ht_rotulo2)) ht_rotulo = html_label.gera("Destino", ": ") ht_campo = html_input.gera(None, "text", "destino", None, None, True, True, "SDU", None) linhas.append((ht_rotulo, ht_campo,)) ht_rotulo = html_label.gera("Data máxima de chegada", ": ") ht_campo = html_input.gera(None, "text", "dia_max", None, None, True, True, "aaaa-mm-dd", None) ht_campo2 = html_input.gera(None, "text", "hora_max", None, None, True, True, "HH:MM", None) ht_rotulo2 = html_label.gera("UTC", "") linhas.append((ht_rotulo, ht_campo, ht_campo2, ht_rotulo2)) # Monta a tabela com os fragmentos HTML: ht_table = html_table.gera(linhas, None) ht_bt_buscar = html_botao_submit.gera("Buscar", 'sugerir_roteiros', None, '#55ee55') ht_campos = \ ht_table + \ ht_bt_buscar ht = html_form.gera(ht_campos) return ht
def gera(pol): # Atributos da poltrona: id_pol = poltrona.obtem_identificador(pol) atrs_pol = poltrona.obtem_atributos(pol) preco_pol = atrs_pol['preco'] numero_pol = atrs_pol['numero'] # Atributos do trecho da poltrona id_trecho = atrs_pol['id_trecho'] trc = trecho.busca_por_identificador(id_trecho) atrs_trc = trecho.obtem_atributos(trc) origem_trc = atrs_trc['origem'] dt_partida_trc = atrs_trc['dia_partida'] + ' ' + atrs_trc['hora_partida'] destino_trc = atrs_trc['destino'] dt_chegada_trc = atrs_trc['dia_chegada'] + ' ' + atrs_trc['hora_chegada'] # Campos da linha para {html_table.gera}: ht_trecho = html_span.gera(None, id_trecho) ht_origem = html_span.gera(None, origem_trc) ht_dt_partida = html_span.gera(None, dt_partida_trc) ht_destino = html_span.gera(None, destino_trc) ht_dt_chegada = html_span.gera(None, dt_chegada_trc) ht_numero = html_span.gera(None, numero_pol) ht_preco = html_span.gera(None, preco_pol) linha = [ \ ht_trecho, ht_origem, ht_dt_partida, ht_destino, ht_dt_chegada, ht_numero, ht_preco ] ver = True # Por enquanto. if ver: args_ver = {'id_poltrona': id_pol} ht_ver = html_botao_submit.gera("Ver", 'ver_poltrona', args_ver, '#60a3bc') linha.append(ht_ver) return linha
def gera(cpr): id_compra = compra.obtem_identificador(cpr) ht_titulo = html_label.gera("Selecione o método de pagamento", ": ") ht_opcoes = \ html_botao_radio.gera("metodo", "paypau", "PayPau") + "<br/>" + \ html_botao_radio.gera("metodo", "mrcard", "MonsterCard") + "<br/>" + \ html_botao_radio.gera("metodo", "boleto", "Boleto") + "<br/>" + \ html_botao_radio.gera("metodo", "deposito", "Depósito") + "<br/>" + \ html_botao_radio.gera("metodo", "bois", "Bois gordos") + "<br/>" + \ html_botao_radio.gera("metodo", "balas", "Balinhas") ht_submit = html_botao_submit.gera("Alterar", "alterar_pagamento", {'id_compra': id_compra}, '#55ee55') ht_campos = \ ht_titulo + "<br/>" + \ "" + "<br/>" + \ ht_opcoes + "<br/>" + \ "" + "<br/>" + \ ht_submit return html_form.gera(ht_campos)
def gera(atrs, admin): # Dados para {html_form_table.gera} # {(rotulo,tipo,chave,dica,visivel,editavel,obrigatorio)} dados_linhas = ( ( "Nome", "text", "nome", "Fulano de tal", True, True, False, ), ( "documento", "text", "documento", "RG 4.444.444-4 SSP SP", True, True, False, ), ( "email", "email", "email", "*****@*****.**", True, True, False, ), ( "telefone", "text", "telefone", "(XX) XXXX-XXXX", True, True, False, ), ( "CPF", "text", "cpf", "XXX.XXX.XXX-XX", True, True, False, ), ) ht_table = html_form_table.gera(dados_linhas, atrs) ht_submit = html_botao_submit.gera("Buscar", "buscar_usuarios", None, '#55ee55') ht_cancel = html_botao_simples.gera("Cancelar", "principal", None, '#ff2200') ht_conteudo = \ ht_table + \ ht_submit + \ ht_cancel return html_form.gera(ht_conteudo)
def gera(ses, pol, atrs, erros): # Obtem dados da sessão e seu usuário: usr_ses = None if ses == None else sessao.obtem_usuario(ses) admin = sessao.eh_administrador(ses) carr = None if (ses == None) or admin else sessao.obtem_carrinho(ses) # Obtem dados correntes da poltrona: assert pol != None, "poltrona deve ser especificada" assert type(pol) is poltrona.Objeto_Poltrona id_pol = poltrona.obtem_identificador(pol) assert id_pol != None # Paranóia. # Completa {atrs} com atributos correntes de {pol}: if atrs == None: atrs = {}.copy() # Por via das dúvidas. atrs_pol = poltrona.obtem_atributos(pol) assert atrs_pol != None # Paranóia for ch, val in atrs_pol.items(): if not ch in atrs: atrs[ch] = val # Obtem compra {cpr} da poltrona, se houver: id_cpr = poltrona.obtem_atributo(pol, 'id_compra') cpr = None if id_cpr == None else compra.busca_por_identificador(id_cpr) cpr_aberta = False if cpr == None else compra.obtem_status( cpr) == 'comprando' usr_cpr = None if cpr == None else compra.obtem_cliente(cpr) # Obtem trecho {trc} da poltrona: id_trc = poltrona.obtem_atributo(pol, 'id_trecho') assert id_trc != None # Paranóia. trc = trecho.busca_por_identificador(id_trc) assert trc != None # Paranóia. encerrado = trecho.obtem_atributo(trc, 'encerrado') # Gera botões da página: ht_submit = "" # Tem botão "Alterar" para alterar dados? if admin: ht_submit += html_botao_submit.gera("Alterar", "alterar_poltrona", None, "#ff0000") # Tem botão "Excluir" para excluir a poltrona de {cpr}? if poltrona.pode_excluir(usr_ses, pol): ht_submit += html_botao_simples.gera("Excluir", "excluir_poltrona", {'id_poltrona': id_pol}, "#ff4400") # Tem botão "Comprar" para comprar a poltrona? if poltrona.pode_comprar(usr_ses, pol, carr): ht_submit += html_botao_simples.gera("Comprar", "comprar_poltrona", {'id_poltrona': id_pol}, "#ff4400") # Tem botão "Trocar" para trocar a poltrona? if poltrona.pode_trocar(usr_ses, pol): ht_submit += html_botao_simples.gera("Trocar", "trocar_poltrona", {'id_poltrona': id_pol}, "#ff4400") # Botão de cancelar alteração: if admin: ht_submit += html_botao_simples.gera("Cancelar", "principal", None, "#00ff00") ht_conteudo = html_form_dados_de_poltrona.gera(id_pol, atrs, admin, ht_submit) pag = html_pag_generica.gera(ses, ht_conteudo, erros) return pag
def gera(ses, trc, atrs, erros): # Obtem usuário da sessão, determina privilégios: usr_ses = None if ses == None else sessao.obtem_usuario(ses) admin = sessao.eh_administrador(ses) if atrs == None: atrs = {}.copy() # Por via das dúvidas. # Botões de acão: ht_submit = "" if trc == None: # Acrescentando novo trecho: id_trc = None novo = True # O submit é "Acrescentar": ht_submit += html_botao_submit.gera("Acrescentar", "acrescentar_trecho", None, "#ff0000") else: # Visualização/alteração de trecho existente: assert type(trc) is trecho.Objeto_Trecho novo = False id_trc = trecho.obtem_identificador(trc) assert id_trc != None # Paranóia. # Completa {atrs} com atributos de {trc}: atrs_trc = trecho.obtem_atributos(trc) assert atrs_trc != None # Paranóia for ch, val in atrs_trc.items(): if not ch in atrs: atrs[ch] = val # Botoes de ação: if admin: # O submit é "Alterar": ht_submit += html_botao_submit.gera("Alterar", "alterar_trecho", None, "#ff0000") # Tem tamém botão "Clonar": ht_submit += html_botao_simples.gera("Clonar", "clonar_trecho", {'id_trecho': id_trc}, "#ff0000") # Constrói formulário com dados do trecho: ht_dados_trecho = html_form_dados_de_trecho.gera(id_trc, atrs, admin, ht_submit) # Constrói a lista de poltronas do trecho: if novo: ht_dados_poltronas = "" else: # Formata a lista de poltronas: ids_pols_todas = poltrona.busca_por_trecho(trc) if admin: # Mostra todas as poltronas do trecho: ids_pols_ver = ids_pols_todas else: # Mostra só as poltronas disponíveis ou reservadas para compras do usuário {usr}: trc_encerrado = atrs_trc['encerrado'] ids_pols_ver = [].copy() for id_pol in ids_pols_todas: assert id_pol != None # Paranóia. pol = poltrona.busca_por_identificador(id_pol) assert pol != None # Paranóia. id_cpr_pol = poltrona.obtem_atributo(pol, 'id_compra') cpr_pol = None if id_cpr_pol == None else compra.busca_por_identificador( id_cpr_pol) usr_pol = None if cpr_pol == None else compra.obtem_cliente( cpr_pol) # Verifica relevância de {pol} para o usuário: livre = (cpr_pol == None) if (livre and (not trc_encerrado)) or ((usr_ses != None) and (usr_pol == usr_ses)): ids_pols_ver.append(id_pol) if len(ids_pols_ver) == 0: # Não há poltronas a mostrar. estilo_aviso = "color:red;font-size:20;" ht_dados_poltronas = "<br/>" + html_span.gera( estilo_aviso, "Não há poltronas disponíveis") else: # Formata a lista de poltronas: fazer_checkin = admin # Deve ter botão de "Checkin" em cada poltrona? # sys.stderr.write(" ids_pols = %s\n" % str(ids_pols)) # sys.stderr.write(" id_trc = %s\n" % str(id_trc)) carr = None if ses == None else sessao.obtem_carrinho(ses) ht_dados_poltronas = html_lista_de_poltronas_de_trecho.gera( ids_pols_ver, usr_ses, carr) # Botão "Voltar": ht_bt_cancel = html_botao_simples.gera("Voltar", 'principal', None, "#ff2200") # Monta a página: ht_conteudo = \ ht_dados_trecho + "<br/>" + \ ht_dados_poltronas + "<br/>" + \ ht_bt_cancel pagina = html_pag_generica.gera(ses, ht_conteudo, erros) return pagina
def cria_form_completo(): linhas = [].copy() # cria campo de texto com valor inicial ht_rotulo = html_label.gera("campo de texto", ": ") ht_campo = html_input.gera(None, "text", "texto1", "blabla", None, True, True, None, None) linhas.append(( ht_rotulo, ht_campo, )) # cria campo de texto sem valor inicial, com dica ht_rotulo = html_label.gera("campo de texto", ": ") ht_campo = html_input.gera(None, "text", "texto2", None, None, True, False, "Lorem ipusm", None) linhas.append(( ht_rotulo, ht_campo, )) # cria campo de senha ht_rotulo = html_label.gera("campo de senha", ": ") ht_campo = html_input.gera(None, "password", "senha", None, None, True, True, None, None) linhas.append(( ht_rotulo, ht_campo, )) # cria campo numerico ht_rotulo = html_label.gera("campo numerico", ": ") ht_campo = html_input.gera(None, "number", "pernas", "17", "5", True, False, None, None) linhas.append(( ht_rotulo, ht_campo, )) # cria campo escondido ht_rotulo = html_label.gera("campo escondido", ": ") ht_campo = html_input.gera(None, "hidden", "segredo", "boo", None, True, False, None, None) linhas.append(( ht_rotulo, ht_campo, )) # Monta a tabela com os fragmentos HTML: ht_table = html_table.gera(linhas, ["TIPO", "ELEMENTO"]) # cria botao de interacao com o formulario ht_botao = html_botao_submit.gera("Botao", 'url test', None, '#55ee55') # counteudo do formulario ht_campos = \ ht_table + \ ht_botao # cria formulario de teste formulario = html_form.gera(ht_campos) return formulario
res = base_sql.conecta("DB", None, None) assert res == None sys.stderr.write("Criando alguns objetos...\n") tabelas.cria_todos_os_testes(False) # Testes das funções de {gera_html_form}: usr1 = usuario.busca_por_identificador("U-00000001") assert usr1 != None id_usr1 = usuario.obtem_identificador(usr1) atrs_usr1 = usuario.obtem_atributos(usr1) assert not usuario.obtem_atributo(usr1, 'administrador') usr3 = usuario.busca_por_identificador("U-00000003") assert usr3 != None id_usr3 = usuario.obtem_identificador(usr3) atrs_usr3 = usuario.obtem_atributos(usr3) assert usuario.obtem_atributo(usr3, 'administrador') atrs_usr0 = atrs_usr1 del atrs_usr0['nome'] del atrs_usr0['telefone'] ht_bt_coisar = html_botao_submit.gera("Coisar", "coisar", {'coisa': "568"}, "#ffaa00") testa("admF_usrN", None, atrs_usr0, False, ht_bt_coisar) testa("admF_usrC", id_usr1, atrs_usr1, False, ht_bt_coisar) testa("admT_usrC", id_usr1, atrs_usr1, True, ht_bt_coisar) testa("admT_usrA", id_usr3, atrs_usr3, True, ht_bt_coisar)
def gera(atrs, admin): # Dados para {html_form_table.gera} # {(rotulo,tipo,chave,dica,visivel,editavel,obrigatorio)} dados_linhas = ( ( "Nome", "text", "nome", "Nome", True, True, True, ), ( "Email", "text", "email", "Email", True, True, True, ), ( "Telefone", "text", "telefone", "Telefone", True, True, True, ), ( "Assunto", "text", "assunto", "Assunto", True, True, True, ), ( "Mensagem", "textarea", "mensagem", "Digite sua mensagem aqui", True, True, True, ), ) ht_table = html_form_table.gera(dados_linhas, atrs) ht_submit = html_botao_submit.gera("Enviar", "enviar_msg_contato", None, '#55ee55') ht_cancel = html_botao_simples.gera("Cancelar", "principal", None, '#ff2200') ht_conteudo = \ ht_table + \ ht_submit + \ ht_cancel return html_form.gera(ht_conteudo)
def gera(atrs, admin): ht_cabe = html_cabecalho.gera("Busca de trechos", False) # Dados para {html_form_table.gera} # {(rotulo,tipo,chave,dica,visivel,editavel,obrigatorio)} dados_linhas = (( "Origem", "text", "origem", "Código do aeroporto", True, True, False, ), ( "Data mínima de partida", "text", "dia_partida", "aaaa-mm-dd", True, True, False, ), ( None, "text", "hora_partida", "hh:mm", True, True, False, ), ( "Destino", "text", "destino", "Código do aeroporto", True, True, False, ), ( "Data máxima de chegada", "text", "dia_chegada", "aaaa-mm-dd", True, True, False, ), ( None, "text", "hora_chegada", "hh:mm", True, True, False, ), ("Veiculo", "text", "veiculo", "Código do veiculo", admin, True, False)) ht_table = html_form_table.gera(dados_linhas, atrs) ht_submit = html_botao_submit.gera("Buscar", "buscar_trechos", None, '#55ee55') ht_cancel = html_botao_simples.gera("Cancelar", "principal", None, '#ff2200') ht_conteudo = \ ht_cabe + "<br/>\n" + \ ht_table + \ ht_submit + \ ht_cancel return html_form.gera(ht_conteudo)
poltrona.cria_testes(False) def testa(rotulo, *args): """Testa {funcao(*args)}, grava resultado em "testes/saida/{modulo}.{funcao}.{rotulo}.html".""" modulo = html_form_dados_de_poltrona funcao = modulo.gera frag = True # {True} se for apenas um fragmento HTML, {False} se for página completa. pretty = False # Se {True}, formata HTML para legibilidate (mas introduz brancos nos textos). utils_testes.testa_gera_html(modulo, funcao, rotulo, frag, pretty, *args) ht_submit = "" ht_submit += html_botao_submit.gera("Escovar", "escovar_poltrona", None, "#ffff00") ht_submit += html_botao_simples.gera("Repensar", "repensar_a_vida", {'coisa': "418"}, "#00cc00") pol1_id = "A-00000001" pol1 = poltrona.busca_por_identificador(pol1_id) pol1_atrs = {} pol1_id_cpr = None testa("pol1_alterar_vazio", pol1_id, pol1_atrs, True, ht_submit) pol2_id = "A-00000007" pol2 = poltrona.busca_por_identificador(pol2_id) pol2_atrs = {'preco': 23.45, 'id_trecho': "T-00000231", 'numero': "99F"} assert poltrona.obtem_atributo(pol2, 'id_compra') == None pol2_id_cpr = None testa("pol2_alterar_alguns", pol2_id, pol2_atrs, True, ht_submit)
def gera(cpr, editavel, texto_bt, comando_bt): # Obtem atributos a mostrar: valores = {}.copy() id_cpr = compra.obtem_identificador(cpr) atrs_cpr = compra.obtem_atributos(cpr) # Atributos da compra em si valores['id_cpr'] = id_cpr valores['status'] = atrs_cpr['status'] valores['nome_pass'] = atrs_cpr['nome_pass'] valores['doc_pass'] = atrs_cpr['doc_pass'] valores['preco_tot'] = ("%.2f" % compra.calcula_preco(cpr)) # valores['pagamento'] = atrs_cpr['pagamento'] # Cliente que está montando ou montou a compra: usr = compra.obtem_cliente(cpr) valores['id_usr'] = usuario.obtem_identificador(usr) atrs_usr = usuario.obtem_atributos(usr) valores['nome_usr'] = atrs_usr['nome'] # Bilhetes da compra: ids_pols = compra.obtem_poltronas(cpr) num_trechos = len(ids_pols) valores['n_trechos'] = str(num_trechos) if (num_trechos >= 1): # Obtém origem, data, e hora de partida do primeiro trecho: pol_ini = poltrona.busca_por_identificador(ids_pols[0]) id_trc_ini = poltrona.obtem_atributo(pol_ini, 'id_trecho') trc_ini = trecho.busca_por_identificador(id_trc_ini) origem = trecho.obtem_atributo(trc_ini, 'origem') dh_partida = trecho.obtem_dia_e_hora_de_partida(trc_ini) valores['partida'] = origem + " " + dh_partida # Obtém destino, data, e hora de chegada do último trecho: pol_fin = poltrona.busca_por_identificador(ids_pols[-1]) id_trc_fin = poltrona.obtem_atributo(pol_fin, 'id_trecho') trc_fin = trecho.busca_por_identificador(id_trc_fin) destino = trecho.obtem_atributo(trc_fin, 'destino') dh_chegada = trecho.obtem_dia_e_hora_de_chegada(trc_fin) valores['chegada'] = destino + " " + dh_chegada # Linhas para {html_table.gera}: linhas = ( html_cpr_campo("Compra", 'id_cpr', valores, 'text', None, False), html_cpr_campo("Cliente", 'id_usr', valores, 'text', None, False), html_cpr_campo("Nome do cliente", 'nome_usr', valores, 'text', None, False), html_cpr_campo("Nome do passageiro", 'nome_pass', valores, 'text', "Fulano da Silva", editavel), html_cpr_campo("Documento do passageiro", 'doc_pass', valores, 'text', "123.456.789-10", editavel), html_cpr_campo("Número de trechos", 'n_trechos', valores, 'text', None, False), html_cpr_campo("Preço total", 'preco_tot', valores, 'text', None, False), html_cpr_campo("Estado", 'status', valores, 'text', None, False), html_cpr_campo("Partida", 'partida', valores, 'text', None, False), html_cpr_campo("Chegada", 'chegada', valores, 'text', None, False), ) ht_campos = html_table.gera(linhas, ["", ""]) # Botões: if editavel: args_submit = { 'id_compra': id_cpr } # Argumentos adicionais para submissão. ht_submit = html_botao_submit.gera(texto_bt, comando_bt, args_submit, "#44ff44") ht_campos += "<br/>" + ht_submit return html_form.gera(ht_campos)
def gera(ses, usr, atrs, erros): # Obtem usuário da sessão, determina privilégios: usr_ses = None if ses == None else sessao.obtem_usuario(ses) if usr_ses == None: # Usuário que pediu não está logado: admin = False mesmo = False else: assert type(usr_ses) is usuario.Objeto_Usuario admin = usuario.obtem_atributo(usr_ses, "administrador") mesmo = (usr_ses == usr) if atrs == None: atrs = {}.copy() # Por via das dúvidas. ht_submit = "" ht_bt_cancel = "" if usr == None: # Cadastramento de novo usuário: id_usr = None ht_submit += html_botao_submit.gera("Cadastrar", "cadastrar_usuario", None, "#ff0000") titulo = "Novo usuário" else: # Visualização/alteração de usuário existente: assert usr_ses != None, "operação não autorizada sem login" assert admin or mesmo, "usuário não está autorizado a efetuar esta operação" assert type(usr) is usuario.Objeto_Usuario id_usr = usuario.obtem_identificador(usr) assert id_usr != None # Paranóia. if mesmo: titulo = f"Sua conta" else: titulo = f"Usuário {id_usr}" # Completa {atrs} com atributos de {usr}: atrs_usr = usuario.obtem_atributos(usr) assert atrs_usr != None # Paranóia for ch, val in atrs_usr.items(): if not ch in atrs: atrs[ch] = val # Botoes de ação: ht_submit += html_botao_submit.gera("Alterar", "alterar_usuario", None, "#ff0000") ht_bt_cancel = html_botao_simples.gera("Voltar", 'principal', None, "#ff2200") ht_titulo = "<h2>" + titulo + "</h2>" # Cria formulário: ht_form = html_form_dados_de_usuario.gera(id_usr, atrs, admin, ht_submit) # Botoes adicionais: ht_bt_linhas = [].copy() if usr != None and not mesmo: # Botões para administrador ver objetos associados a usuário: args_bt = {'id': id_usr} estilo_n = "font-family:\"Courier\";font-size:20;" n_compras = len(usuario.compras_abertas(usr)) ht_n_compras = html_span.gera(estilo_n, str(n_compras)) ht_bt_compras = html_botao_simples.gera("Ver compras", "ver_compras_de_usuario", args_bt, '#eeee55') ht_bt_linhas.append(( html_label.gera("Compras abertas", ":"), ht_n_compras, ht_bt_compras, )) n_sessoes = len(usuario.sessoes_abertas(usr)) ht_n_sessoes = html_span.gera(estilo_n, str(n_sessoes)) ht_bt_sessoes = html_botao_simples.gera("Ver sessões", "ver_sessoes_de_usuario", args_bt, '#eeee55') ht_bt_linhas.append(( html_label.gera("Sessoes abertas", ":"), ht_n_sessoes, ht_bt_sessoes, )) n_poltronas = len(usuario.poltronas_abertas(usr)) ht_n_poltronas = html_span.gera(estilo_n, str(n_poltronas)) ht_bt_poltronas = html_botao_simples.gera("Ver poltronas", "ver_poltronas_de_usuario", args_bt, '#eeee55') ht_bt_linhas.append(( html_label.gera("Poltronas abertas", ":"), ht_n_poltronas, ht_bt_poltronas, )) ht_bts_ver_coisas = html_table.gera(ht_bt_linhas, ( "", "", )) ht_conteudo = \ ht_titulo + \ ht_form + "<br/>\n" + \ ht_bts_ver_coisas + "<br/>" + \ ht_bt_cancel pag = html_pag_generica.gera(ses, ht_conteudo, erros) return pag