def processa(ses, args): assert ses != None and sessao.aberta(ses) id_ses = args['id_sessao'] ses_exit = sessao.busca_por_identificador(id_ses) # Se for fechar a sessao ativa, feito logout if ses == ses_exit: sessao.fecha(ses) ses_nova = None pag = html_pag_principal.gera(ses_nova, None) # caso nao seja a sessao ativa, somente fecha e retorna para pagina de sessoes else: sessao.fecha(ses) ses_nova = None pag = html_pag_principal.gera(ses_nova, None) return pag, ses_nova
def processa(ses, args): if ses == None or not sessao.aberta(ses): # Isto nunca deveria acontecer, mas em todo caso: pag = html_pag_mensagem_de_erro.gera( ses, "Precisa entrar no site antes de sair") ses_nova = ses else: sessao.fecha(ses) ses_nova = None pag = html_pag_principal.gera(ses_nova, None) return pag, ses_nova
def processa(ses, args): # Obtem usuário e carrinho de compras: assert ses != None # Comando não deveria ser acessível a usuário não logado. usr_ses = sessao.obtem_usuario(ses) assert usr_ses != None # Paranóia. admin = usuario.obtem_atributo(usr_ses, 'administrador') assert not admin # Admnistrador não deveria ter acesso a este cmd. #Obtem a poltrona a comprar: id_pol = args['id_poltrona'] if 'id_poltrona' in args else None assert id_pol != None # Paranóia (formulário ou botão deve fornecer) pol = poltrona.busca_por_identificador(id_pol) assert pol != None # Paranóia. # Obtém carrinho do usuário: carr = sessao.obtem_carrinho(ses) assert carr != None # Todo cliente comum deve ter carrinho. id_carr = compra.obtem_identificador(carr) try: if not poltrona.pode_comprar(usr, pol, carr): # Não deveria acontecer, mas em todo caso: raise ErroAtrib("Esta poltrona não está disponível") # Muda a poltrona para comprada poltrona.muda_atributos(pol, { 'id_compra': id_carr }) # Mostra o carrinho do usuário com a poltrona comprada: pag = html_pag_compra.gera(ses, cpr, excluir, None) except ErroAtrib as ex: erros = ex.args[0] # Se o trecho da poltrona estiver disponível, mostra o trecho para outra compra: id_trc = poltrona.obtem_atributo(pol, 'id_trecho') assert id_trc != None # Paranoia. trc = trecho.busca_por_identificador(id_trc) assert trc != None # Paranoia. if trecho.verificar_disponibilidade(trc) and trecho_eh_compativel(cpr, trc): # Usuário pode comprar outra poltrona deste trecho: pag = html_pag_trecho.gera(ses, trc, None, erros) else: # Usuário não pode comprar nenuma poltrona neste trecho. # Volte para a página principal. # !!! Deveria buscar e mostrar roteiros de mesma origem e destino !!! pag = html_pag_principal.gera(ses, erros) return pag
def processa(ses, dados): ses_nova = ses # Caso o login falhe. if ses != None: # Não deveria acontecer, mas por via das dúvidas: pag = html_pag_mensagem_de_erro.gera(ses, "Favor sair da sessão corrente primeiro") else: erro_email = None # Email não especificado ou não cadastrado. erro_senha = None # Senha não especificada ou inválida. if 'senha' not in dados: erro_senha = "campo 'senha' é obrigatório" senha = None else: senha = dados['senha'] if 'email' not in dados: erro_email = "campo 'email' é obrigatório" email = None else: email = dados['email'] usr = None if email != None and senha != None: # Obtem o usuário pelo email: id_usuario = usuario.busca_por_email(email) if id_usuario == None: erro_email = "Usuário " + email + " não está cadastrado" else: usr = usuario.busca_por_identificador(id_usuario) assert usr != None atrs_usr = usuario.obtem_atributos(usr) if atrs_usr["senha"] != senha: erro_senha = "Senha incorreta" usr = None if usr != None: cookie = secrets.token_urlsafe(32) carrinho = define_carrinho(usr, id_usuario) ses_nova = sessao.cria(usr, cookie, carrinho) pag = html_pag_principal.gera(ses_nova, None) else: erros = [ erro_email, erro_senha ] pag = html_pag_mensagem_de_erro.gera(None, erros) return pag, ses_nova
def processa_comando(tipo, ses, dados): """Esta função processa um comando HTTP 'GET', 'POST', ou 'HEAD' recebido pelo servidor, com as informações convertidas em um dicionario {dados}. A sessão {ses} deve ser a sessão deduzida a partir dos cookies que viram com o comando HTTP. Esta função devolve a página {pag} a ser enviada ao usuário. Devolve também a sessão {ses_nova} corrente. Esta sessão pode ser diferente de {ses}, se o comando for login ou logout.""" mostra(0, "dados = " + str(dados) + "") mostra_cmd = True # Deve mostrar os dados do comando no final da página? cmd = dados['real_path'] del dados['real_path'] # Define página a retornar {pag} e a sessão {ses_nova} para futuros comandos: ses_nova = ses # Geralmente a sessão não muda if tipo == 'GET' or tipo == 'POST': # Obtem os argumentos do comando: if tipo == 'GET': # Comando causado por acesso inicial ou botão simples: args = dados['query_data'] del dados[ 'query_data'] # Argumentos do comando "GET", no próprio URL "cmd?n1=v1&n2=v2...". elif tipo == 'POST': # Comando causado por botão do tipo "submit" dentro de um <form>...</form>: args = dados['form_data'] del dados['form_data'] # Campos do formulário. else: assert False # Remove parenteses e colchetes supérfluos em {args}: args = descasca_argumentos(args) # Despacha o comando: # !!! Completar a lista abaixo com todos os módulos {comando_*.py} que existem. !!! sys.stderr.write("!! processa_comando: cmd = %s\n" % cmd) sys.stderr.write("!! processa_comando: ses = %s\n" % \ (sessao.obtem_identificador(ses) if ses != None else "None")) # --- comandos gerais ------------------------------------------------ if cmd == '' or cmd == '/' or cmd == '/principal': # Acesso sem comando, ou usuário apertou "Principal" no menu geral. pag = html_pag_principal.gera(ses, []) elif cmd == '/ver_objeto': # Quer ver os atributos de um objeto: pag = comando_ver_objeto.processa(ses, args) elif cmd == '/solicitar_pag_contato': # Quer formulário para mandar mensagens aos administradores: pag = comando_solicitar_pag_contato.processa(ses, args) elif cmd == '/comando_relatorio_de_trafego': # Quer relatório de tráfego nos aeroportos: pag = comando_relatorio_de_trafego.processa(ses, args) # --- comandos referentes a {Objeto_Usuario} ------------------------ elif cmd == '/solicitar_pag_cadastrar_usuario': # Quer formumlário para cadastrar novo usuário: pag = comando_solicitar_pag_cadastrar_usuario.processa(ses, args) elif cmd == '/cadastrar_usuario': # Preencheu atributos de novo usuário e quer executar a criação: pag = comando_cadastrar_usuario.processa(ses, args) elif cmd == '/solicitar_pag_alterar_usuario': # Quer formulário formulário para alterar atributos de algum usuário: pag = comando_solicitar_pag_alterar_usuario.processa(ses, args) elif cmd == '/alterar_usuario': # Alterou atributos de um usuário e quer executar as alterações: pag = comando_alterar_usuario.processa(ses, args) elif cmd == '/solicitar_pag_buscar_usuarios': # Quer formulário para especificar uma busca na tabela de usuários: pag = comando_solicitar_pag_buscar_usuarios.processa(ses, args) elif cmd == '/buscar_usuarios': # Preencheu formulário de busca de usuários, quer executar a busca: pag = comando_buscar_usuarios.processa(ses, args) # --- comandos referentes a {Objeto_Trecho} ----------------------- elif cmd == '/ver_trecho': # Quer ver atributos de um trecho: pag = comando_ver_trecho.processa(ses, args) elif cmd == '/solicitar_pag_acrescentar_trecho': # Quer formulário para acrescentar novo trecho: pag = comando_solicitar_pag_acrescentar_trecho.processa(ses, args) elif cmd == '/solicitar_pag_clonar_trecho': # Quer formulário para acreacentar novo trecho, copiando atributos de outro: pag = comando_solicitar_pag_clonar_trecho.processa(ses, args) elif cmd == '/acrescentar_trecho': # Preencheu atributos de um novo trecho e quer criar o mesmo: pag = comando_acrescentar_trecho.processa(ses, args) elif cmd == '/solicitar_pag_alterar_trecho': # Quer formulário para alterar atributos de trecho existente: pag = comando_solicitar_pag_alterar_trecho.processa(ses, args) elif cmd == '/alterar_trecho': # Alterou atributos de um trecho e quer executar as alterações: pag = comando_alterar_trecho.processa(ses, args) elif cmd == '/encerrar_trecho': # Quer marcar um trecho como "encerrado": pag = comando_encerrar_trecho.processa(ses, args) elif cmd == '/solicitar_pag_buscar_trechos': # Quer formulário para especificar uma busca na tabela de trechos: pag = comando_solicitar_pag_buscar_trechos.processa(ses, args) elif cmd == '/buscar_trechos': # Preencheu parâmetros de busca de trechos e quer resultado: pag = comando_buscar_trechos.processa(ses, args) elif cmd == '/solicitar_pag_ofertas': # Quer lista dos trechos que tem poltronas em oferta: pag = comando_solicitar_pag_ofertas.processa(ses, args) # --- comandos referentes a {Objeto_Poltrona} ----------------------- elif cmd == '/ver_poltrona': # Quer ver atributos de uma poltrona: pag = comando_ver_poltrona.processa(ses, args) elif cmd == '/solicitar_pag_alterar_poltrona': # Quer formulário para alterar atributos de uma poltrona: pag = comando_solicitar_pag_alterar_poltrona.processa(ses, args) elif cmd == '/alterar_poltrona': # Alterou atributos de uma poltrona, quer executar as alterações: pag = comando_alterar_poltrona.processa(ses, args) elif cmd == '/comprar_poltrona': # Quer comprar uma poltrona (um bilhete): pag = comando_comprar_poltrona.processa(ses, args) elif cmd == '/excluir_poltrona': # Quer excluir uma potrona de um pedido de compra: pag = comando_excluir_poltrona.processa(ses, args) elif cmd == '/ver_poltronas_de_usuario': # Quer ver todas as poltronas compradas por um usuário: pag = comando_ver_poltronas_de_usuario.processa(ses, args) # --- comandos referentes a {Objeto_Compra} ----------------------- elif cmd == '/ver_compra': # Quer ver os atributos de um pedido de compra: pag = comando_ver_compra.processa(ses, args) elif cmd == '/alterar_compra': # Quer formulário para alterar atributos de um pedido de compra pag = comando_alterar_compra.processa(ses, args) elif cmd == '/alterar_pagamento': # Quer formulário para alterar atributos de um pedido de compra ## Descomentar linha apos implementar #pag = comando_alterar_pagamento.processa(ses, args) pag = html_pag_mensagem_de_erro.gera(ses, ( "** Adicionar atributo forma_pag a compra.py e descomentar implementacao do comando alterar_pagamento" )) elif cmd == '/solicitar_pag_escolher_pagamento': # Quer formulário para escolher a forma de pagamento de uma compra: pag = comando_solicitar_pag_escolher_pagamento.processa(ses, args) elif cmd == '/ver_carrinho': # Quer ver seu carrinho de compras: pag = comando_ver_carrinho.processa(ses, args) elif cmd == '/definir_carrinho': # Quer definir uma outra compra em aberto como carrinho da sessao: pag = comando_definir_carrinho.processa(ses, args) elif cmd == '/finalizar_compra': # Quer finalizar uma compra: pag = comando_finalizar_compra.processa(ses, args) elif cmd == '/ver_minhas_compras': # Quer ver a lista de todas as suas compras: pag = comando_ver_minhas_compras.processa(ses, args) elif cmd == '/solicitar_pag_buscar_compras': # Quer formulário para especificar uma busca na tabela de compras: pag = comando_solicitar_pag_buscar_compras.processa(ses, args) elif cmd == '/buscar_compras': # Preencheu dados de uma busca de compras, quer exxecutar a busca: pag = comando_buscar_compras.processa(ses, args) # --- comandos referentes a {Objeto_Sessao} ----------------------- elif cmd == '/solicitar_pag_login': # Qer formulário para fazer "login": # ATENÇÃO: Este comando só mostra o formulário de login, não muda a sessão ainda. pag = comando_solicitar_pag_login.processa(ses, args) elif cmd == '/fazer_login': # Preencheu o formulário de login e quer entrar (criar nova sessão): # ATENÇÃO: devolve também a nova sessão (que pode ser {None} se o login não deu certo). pag, ses_nova = comando_fazer_login.processa(ses, args) elif cmd == '/fazer_logout': # Quer fazer "logout" (fechar a sessão corrente): # ATENÇÃO: devolve também a nova sessão (que geralmente vai ser {None}). pag, ses_nova = comando_fazer_logout.processa(ses, args) elif cmd == '/fechar_sessao': # Quer encerrar uma sessão dada: pag, ses_nova = comando_fechar_sessao.processa(ses, args) elif cmd == '/ver_sessoes': # !!! ESCLARECER !!! # Quer ver sessões: pag = comando_ver_sessoes.processa(ses, args) elif cmd == '/ver_sessao': pag = comando_ver_sessao.processa(ses, args) elif cmd == '/ver_minhas_sessoes': # Quer ver sessões: pag = comando_ver_minhas_sessoes.processa(ses, args) elif cmd == '/enviar_msg_contato': # Envia mensagem de contato pag = comando_enviar_msg_contato.processa(ses, args) # --- comandos referentes a roteiros ----------------------- elif cmd == '/solicitar_pag_sugerir_roteiros': # Quer formulário para especificar uma busca de roteiros: pag = comando_solicitar_pag_sugerir_roteiros.processa(ses, args) elif cmd == '/sugerir_roteiros': # Preencheu formulário de busca e quer fazer a busca: pag = comando_sugerir_roteiros.processa(ses, args) elif cmd == '/ver_roteiro': # Quer ver um roteiro específico: pag = comando_ver_roteiro.processa(ses, args) elif cmd == '/ver_compras_de_usuario': pag = comando_ver_compras_de_usuario.processa(ses, args) elif cmd == '/comprar_roteiro': # Quer comprar um roteiro específico: pag = comando_comprar_roteiro.processa(ses, args) # -------------------------------------------------------------- else: # Comando não identificado pag = html_pag_mensagem_de_erro.gera( ses, ("** comando POST \"%s\" inválido" % cmd)) elif tipo == 'HEAD': # Comando emitido por proxy server: # !!! (MAIS TARDE) Tratar este caso !!! args = {}.copy() pag = html_pag_mensagem_de_erro.gera( ses, ("** comando HEAD \"%s\" não implementado" % cmd)) else: # Tipo de comando inválido: args = {}.copy() pag = html_pag_mensagem_de_erro.gera( ses, ("** comando \"%s\" não implementado" % tipo)) sys.stderr.write("!! processa_comando: pag = %s\n" % pag) if mostra_cmd: # Acrescenta os dados para depuração: pag = re.sub(r'</body>', ("<br/>%s<br/><br/></body>" % formata_dados_http(cmd, args, dados)), pag) return pag, ses_nova