def cria_linha(texto):
    """Cria uma linha de teste com {texto} dado."""
    t1 = html_span.gera("font-family: 'Courier'; font-size: 30px", texto)
    t2 = html_span.gera(
        "font-family: 'Helvetica'; font-size: 20px; color: red", texto)
    t3 = html_span.gera(
        "font-family: 'Helvetica'; font-size: 20px; background-color: yellow",
        texto)
    linha = "<li>" + \
      "Lorem ipsum" + t1 + \
      "Gallia omnia" + t2 + \
      "Quousque tandem" + t3 + \
      "Pluribus unum" + \
      "</li>"
    return linha
def gera(erros):
    if type(erros) is list or type(erros) is tuple:
        erros = "\n".join(erros)

    # Processa quebras de linha em {erros}:
    erros = re.sub(r'\n', r'<br/>Erro: \n', erros)

    # Formata as mensagens:
    estilo_erro = \
      "font-family:Courier;" + \
      "font-size:20px;" + \
      "font-weight:bold;" + \
      "padding: 2px;" + \
      "text-align:left;" + \
      "color: #880000;"
    ht_erros = html_span.gera(estilo_erro, erros)

    # Formata como parágrafo:
    estilo_parag = \
      "margin-top:2px;" + \
      "margin-bottom:2px;" + \
      "text-indent:0px;"
    ht_res = html_paragrafo.gera(estilo_parag, ht_erros)

    return ht_res
示例#3
0
def gera(ses, dados):

    # Converte dados no formato gerado por {trecho.resumo_de_trafego} para
    # formato aceito por {html_table}
    estilo_item = "font-family:Courier;font-size:20;"
    ht_linhas_dados = [].copy()
    for dado in dados:
        linha_porto = [].copy()
        # Codigo do aeroporto
        linha_porto.append(html_span.gera(estilo_item, str(dado[0])))

        # Infos de chegada
        for ch_item in dado[1]:
            linha_porto.append(html_span.gera(estilo_item, str(ch_item)))

        # Infos de saida
        for sa_item in dado[2]:
            linha_porto.append(html_span.gera(estilo_item, str(sa_item)))

        ht_linha_porto = [html_span.gera(estilo_item, x) for x in linha_porto]

        ht_linhas_dados.append(ht_linha_porto)

    linha_cab = [].copy()
    linha_cab.append("Aeroporto")
    for lado in ("chegada", "saida"):
        for tt in ( \
            "# de trechos",  \
            "# total de poltronas", \
            "# de poltronas reservadas",  \
            "Total dos preços das poltronas reservadas",  \
            "# de passageiros que fizeram checkin" \
          ):
            linha_cab.append(tt + " (" + lado + ")")

    estilo_cab = html_estilo_cabecalho_de_tabela.gera()
    ht_linha_cab = map(lambda x: html_span.gera(estilo_cab, x), linha_cab)

    ht_table = html_table.gera(ht_linhas_dados, ht_linha_cab)
    return html_pag_generica.gera(ses, ht_table, None)
def gera(conteudo):
  # define o estilo padrão:
  fam_fonte = "Courier"
  peso_fonte = None
  tam_fonte = "18px"
  estilo = \
    "  display: inline-block;" + \
    "  font-family: " + fam_fonte + ";" + \
    "  font-size: " + tam_fonte + ";" + \
    "  padding: 5px;"
  form = "<form>" + str(conteudo) + "</form>"
  ht = html_span.gera(estilo, form)
  return ht
def gera_legenda(fazer_checkin):

  estilo = "font-size:20px;font-weight:bold;" 
  
  legenda_txt = \
    "<br/>" + \
    "NP = Número da poltrona<br/>" + \
    "OF = Passagem em promoção<br/>" + \
    "CK = Passageiro já fez checkin<br/>" + \
    "EM = Passageiro já embarcou<br/>"
  
  ht_legenda = html_span.gera(estilo, legenda_txt)
  return ht_legenda
示例#6
0
def gera(ses, erros):
  if ses !=None:
    usr = sessao.obtem_usuario(ses)
    atrs = usuario.obtem_atributos(usr)
    nome = atrs['nome']
    texto1 = "Olá <b>"+nome+"</b>!"
  else:
    texto1 = None
  texto2 = "Bem vindo(a) ao nosso site de viagens!"
  now = datetime.now(timezone.utc)
  data = now.strftime("%Y-%m-%d %H:%M:%S %z")
  texto3 = "<hr/><i>DATA CORRENTE </i><b>" + data + "</b><br/>TUDO EM ORDEM NESTE SERVIDOR<hr/>"
  cor_texto = "#000488"
  cor_fundo = "#eeeeee"
  estilo = f"font-family: Courier; font-size: 16px; font-weight: normal; padding: "\
           f"5px; text-align: center; color: {cor_texto}; background-color: {cor_fundo}"

  bloco_texto1 = html_span.gera(estilo, texto1)
  bloco_texto2 = html_span.gera(estilo, texto2)
  bloco_texto3 = html_span.gera(estilo, texto3)
  conteudo = bloco_texto1 + bloco_texto2 + bloco_texto3
  pagina = html_pag_generica.gera(ses, conteudo, erros)
  return pagina
示例#7
0
def gera(pol, id_compra, ver, excluir):

    # Atributos da poltrona:
    id_pol = poltrona.obtem_identificador(pol)
    atrs_pol = poltrona.obtem_atributos(pol)
    assert atrs_pol['id_compra'] == id_compra

    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_simples.gera("Ver", 'ver_poltrona', args_ver,
                                         '#60a3bc')
        linha.append(ht_ver)
        linha.append("</form>")

    if excluir:
        args_excluir = {'id_poltrona': id_pol, 'id_compra': id_compra}
        ht_excluir = html_botao_simples.gera("Excluir", 'excluir_poltrona',
                                             args_excluir, '#ff4422')
        linha.append(ht_excluir)

    return linha
def gera_cabecalho(fazer_checkin):

  campos = [].copy() # Campos a devolver

  # Devolve a linha de cabeçalho:
  estilo = html_estilo_cabecalho_de_tabela.gera()
  campos.append(html_span.gera(estilo, "NP"))      # Número da poltrona.
  campos.append(html_span.gera(estilo, "Preço"))   # Preço.
  campos.append(html_span.gera(estilo, "OF"))      # É oferta?
  campos.append(html_span.gera(estilo, "Compra"))  # Compra que reservou.
  campos.append(html_span.gera(estilo, "CK"))      # Passageiro fez checkin?
  campos.append(html_span.gera(estilo, "EM"))      # Passageiro embarcou?
  campos.append("");                               # Botão "Ver".
  campos.append("");                               # Botão "Alterar"/"Comprar"/"Excluir".

  if fazer_checkin:
    campos.append(html_span.gera(estilo, "Passageiro"))   # Nome do passageiro.
    campos.append(html_span.gera(estilo, "Documento"))    # Docmento do passageiro.
    campos.append("")                                     # Botão "Checkin.
  
  return campos
示例#9
0
def formata_dados_http(cmd, args, resto):
    """Esta função de depuração devolve um string que é um trecho de HTML5 a ser inserido
  no final de uma página.  Ele mostra a função {cmd} que foi executada, o dicionário {args}
  com os argumentos da mesma, e o dicionário {resto} com os demais parâmetros do comando
  HTTP recebido, num formato razoavelmente legível."""
    resto_d = resto.copy()
    tipo = resto_d['command']
    del resto_d['command']  # 'GET', 'POST', ou 'HEAD'
    # Dados principais:
    args_lin = utils_testes.formata_dict(args)
    resto_lin = utils_testes.formata_dict(resto_d)

    # Monta um bloco HTML com os dados de depuração:
    texto = ("Resposta a comando HTTP \"%s\" recebido com dados principais:" %
             tipo)
    texto = texto + ("<br/>cmd = \"%s\"<br/>args =<br/>%s" % (cmd, args_lin))
    texto = texto + ("<br/><hr/>Outros dados:<br/>%s" % resto_lin)
    estilo = f"font-family: Courier; font-size: 18px; font-weight: normal; padding: 5px; text-align: left;"
    conteudo = html_span.gera(estilo, texto)
    conteudo = "<hr/>\n" + html_div.gera("background-color:#bbbbbb;",
                                         conteudo) + "<hr/>\n"
    return conteudo
示例#10
0
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 formata_texto(txt):
    """Formata o texto {txt} com um estilo apropriado."""
    estilo = "font-weight:bold"
    return html_span.gera(estilo, txt)
示例#12
0
def gera_nome_usuario(nome_usuario):
    """Gera o texto "Oi {nome}" para o menu geral."""
    res = html_span.gera(None, "Oi " + nome_usuario)
def gera(pol, alterar, comprar, excluir, fazer_checkin, embarcar):
  
  assert int(alterar) + int(comprar) + int(excluir) <= 1 # No máximo um deve ser "True"

  campos = [].copy() # Campos a devolver

  estilo = "font-size:20px;font-weight:bold;" 

  # Obtem atributos da poltrona:
  id_pol = poltrona.obtem_identificador(pol)
  atrs_pol = poltrona.obtem_atributos(pol)

  numero = atrs_pol['numero']
  preco = atrs_pol['preco']
  oferta = atrs_pol['oferta'] # Se a poltrona está em oferta.
  id_cpr = atrs_pol['id_compra'] # Pedido de compra que reservou a poltrona, ou {None}
  fez_checkin = atrs_pol['fez_checkin'] # Passageiro já fez checkin?
  embarcou = atrs_pol['embarcou'] # Passageiro já embarcou?
  if id_cpr != None:
    # Poltrona está reservada.  Determina a compra:
    cpr = compra.busca_por_identificador(id_cpr)
    assert cpr != None # Paranóia.
  else:
    # Poltrona está livre:
    cpr = None

  args_cmd = { 'íd_poltrona': id_pol } # Argumentos para os comandos.

  # Número da poltrona sempre aparece:
  ht_numero = html_span.gera(estilo, numero)
  campos.append(ht_numero)

  # Preço da poltrona senmpre aparece:
  ht_preco = html_span.gera(estilo, preco)
  campos.append(ht_preco)

  # Indicação de oferta sempre aparece:
  ht_oferta = html_span.gera(estilo + "color:'#ffbb00';", "&#9733;" if oferta else "")
  campos.append(ht_oferta)

  # Coluna de identificador da compra sempre aparece:
  ht_id_cpr = html_span.gera(estilo, id_cpr if cpr != None else "LIVRE")
  campos.append(ht_id_cpr);

  # Coluna de "fez checkin" sempre aparece:
  ht_fez_checkin = html_span.gera(estilo, "CK" if fez_checkin else "")
  campos.append(ht_fez_checkin);

  # Coluna de "embarcou" sempre aparece:
  ht_embarcou = html_span.gera(estilo, "EM" if embarcou else "")
  campos.append(ht_embarcou);

  # Coluna do botão "Ver" sempre aparece:
  ht_bt_ver = html_botao_simples.gera("Ver", "ver_poltrona", {'id_poltrona': id_pol}, "55ee55")
  campos.append(ht_bt_ver);

  # Coluna do botão de ação:
  if alterar:
    ht_bt_acao = html_botao_simples.gera("Alterar", "solicitar_pag_alterar_poltrona", args_cmd, '#bca360')
  elif comprar:
    ht_bt_acao = html_botao_simples.gera("Comprar", 'comprar_poltrona', args_cmd, '#ff0000')
  elif excluir:
    ht_bt_acao = html_botao_simples.gera("Excluir", 'excluir_poltrona', args_cmd, '#ff0000')
  else:
    ht_bt_acao = ""
  campos.append(ht_bt_acao);

  if fazer_checkin:
    # Campos para checkin:
    if cpr != None:
      # Nome e documento do passageiro, e botão de fazer checkin:
      nome_pass = compra.obtem_atributo(cpr, 'nome_pass')
      doc_pass = compra.obtem_atributo(cpr, 'doc_pass')

      ht_nome_pass = html_span.gera(estilo, nome_pass)
      campos.append(ht_nome_pass);

      ht_doc_pass = html_span.gera(estilo, doc_pass)
      campos.append(ht_doc_pass);

      if fez_checkin:
        ht_bt_checkin = ""
      else:
        # Apresentando o botão fazer checkin somente quando o status é pago
        if compra.obtem_atributo(cpr, 'status') == 'pago':
          ht_bt_checkin = html_botao_simples.gera("Checkin", 'fazer_checkin', args_cmd, '#55ee55')
          campos.append(ht_bt_checkin);
    else:
      # Campos em branco:
      campos.append("");
      campos.append("");
      campos.append("");

  if embarcar:
    ht_bt_embarcar = ""
    if fez_checkin:
      ht_bt_embarcar = html_botao_simples.gera("Embarcar", 'embarcar', args_cmd, '#55ee55')
    campos.append(ht_bt_embarcar);

  return 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