-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgera_html_pag_IMP.py
189 lines (162 loc) · 6.2 KB
/
gera_html_pag_IMP.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
# Implementação do módulo {gera_html_pag}.
# Interfaces do projeto importadas por este módulo:
import produto
import sessao
import usuario
import compra
import gera_html_elem
import gera_html_form
import comando_ver_ofertas
import gera_html_botao
from utils_testes import erro_prog, mostra
# Outras interfaces usadas por este módulo:
from datetime import datetime, timezone
from bs4 import BeautifulSoup as bsoup # Pretty-print of HTML
import re, sys
def generica(ses, html_conteudo, erros):
# Cabeçalho das páginas:
html_cabe = gera_html_elem.cabecalho("Site de compras: Projeto MC857A 2019-2s", True)
# Menu geral no alto da página:
logado = (ses != None)
if logado:
usr = sessao.obtem_usuario(ses)
nome_usuario = usuario.obtem_atributos(usr)['nome']
admin = usuario.obtem_atributos(usr)['administrador']
else:
nome_usuario = None
admin = False
html_menu = gera_html_elem.menu_geral(logado, nome_usuario, admin)
# Mensagens de erro:
if erros == None:
erros = []
elif type(erros) == str:
# Split lines, create a list:
erros = re.split('[\n]', erros)
assert type(erros) is list
# Cleanup the messages:
erros = [ er.strip() for er in erros ]
erros = [ er for er in erros if len(er) > 0 ]
if len(erros) != 0:
erros = "<br/>\n" + "<br/>\n".join(erros)
html_erros = gera_html_elem.bloco_de_erro(erros) + "\n"
else:
html_erros = ""
# Rodapé da página:
html_roda = gera_html_elem.rodape()
# Monta a página:
pagina = html_cabe + "<br/>" + html_menu + "<br/>" + html_erros + "<br/>" + html_conteudo + "<br/>" + html_roda
# Formata o HTML para maior legibilidade:
return bsoup(pagina, "html.parser").prettify()
def principal(ses, erros):
if ses !=None:
usr = sessao.obtem_usuario(ses)
atrs = usuario.obtem_atributos(usr)
nome = atrs['nome']
texto1 = "<hr/>Seja bem vindo(a) <b>"+nome+"</b> ao nosso site de compras!"
else:
texto1 = "<hr/>Seja bem vindo(a) ao nosso site de compras!"
now = datetime.now(timezone.utc)
data = now.strftime("%Y-%m-%d %H:%M:%S %z")
texto2 = "<hr/><i>DATA CORRENTE </i><b>" + data + "</b><br/>TUDO EM ORDEM NESTE SERVIDOR<hr/>"
cor_texto = "#000488"
cor_fundo = "#eeeeee"
bloco_texto1 = gera_html_elem.bloco_texto(texto1, None,"Courier","16px","normal","5px","center", cor_texto, cor_fundo)
bloco_texto2 = gera_html_elem.bloco_texto(texto2, None,"Courier","16px","normal","5px","center", cor_texto, cor_fundo)
ofertas = produto.busca_ofertas()
bloco_ofertas = gera_html_elem.bloco_de_lista_de_produtos(ofertas)
conteudo = bloco_texto1 + bloco_ofertas + bloco_texto2
pagina = generica(ses, conteudo, erros)
return pagina
def mostra_produto(ses, id_compra, prod, qtd, erros):
conteudo = gera_html_elem.bloco_de_produto(id_compra, prod, qtd, True)
pagina = generica(ses, conteudo, erros)
return pagina
def lista_de_produtos(ses, idents, erros):
conteudo = gera_html_elem.bloco_de_lista_de_produtos(idents)
pagina = generica(ses, conteudo, erros)
return pagina
def entrar(ses, erros):
conteudo = gera_html_form.entrar()
pagina = generica(ses, conteudo, erros)
return pagina
def contato(ses, erros):
conteudo = gera_html_form.contato()
pagina = generica(ses, conteudo, [])
return pagina
def alterar_endereco(ses, id_compra, atrs, erros):
if atrs == None:
# Obtém atributos correntes da compra:
cpr = compra.busca_por_identificador(id_compra)
atrs = compra.obtem_atributos(cpr)
conteudo = gera_html_form.preencher_endereco(id_compra, atrs)
pagina = generica(ses, conteudo, erros)
return pagina
def escolher_pagamento(ses, id_compra, atrs, erros):
if atrs == None:
# Obtém atributos correntes da compra:
cpr = compra.busca_por_identificador(id_compra)
atrs = compra.obtem_atributos(cpr)
# !!! Completar !!!
conteudo = gera_html_form.escolher_pagamento(id_compra, atrs)
pagina = generica(ses, conteudo, erros)
return pagina
def mostra_carrinho(ses, erros):
if ses == None:
erros = [ "É necessário fazer login para esta função", ] + (erros if erros != None else [])
pagina = mensagem_de_erro(ses, erros)
conteudo = ""
else:
carrinho = sessao.obtem_carrinho(ses)
conteudo = gera_html_elem.bloco_de_compra(carrinho, True)
pagina = generica(ses, conteudo, erros)
return pagina
def mostra_compra(ses, cpr, erros):
detalhe = True
conteudo = gera_html_elem.bloco_de_compra(cpr, True)
pagina = generica(ses, conteudo, erros)
return pagina
def cadastrar_usuario(ses, atrs, erros):
# Quem está cadastrando é administrador?
if ses != None:
usr_ses = sessao.obtem_usuario(ses)
atrs_ses = usuario.obtem_atributos(usr_ses)
admin = (atrs_ses['administrador'] if 'administrador' in atrs_ses else False)
else:
admin = False
# Constrói formulário com dados:
html_dados = gera_html_form.cadastrar_usuario(atrs, admin)
conteudo = html_dados
# Monta a página:
pagina = generica(ses, conteudo, erros)
return pagina
def alterar_usuario(ses, id_usuario, atrs, erros):
# Quem está cadastrando é administrador?
if ses == None:
# Não deveria acontecer:
erro_prog("usuário deveria estar logado")
usr_ses = sessao.obtem_usuario(ses)
atrs_ses = usuario.obtem_atributos(usr_ses)
admin = (atrs_ses['administrador'] if 'administrador' in atrs_ses else False)
# Constrói formulário com dados:
conteudo = gera_html_form.alterar_usuario(id_usuario, atrs, admin)
# Monta a página:
pagina = generica(ses, conteudo, erros)
return pagina
def mostra_sessao(ses, erros):
erros = [ "Função não implementada", ] + (erros if erros != None else [])
pagina = mensagem_de_erro(ses, erros)
return pagina
def mensagem_de_erro(ses, msg):
pagina = generica(ses, "", msg)
return pagina
def lista_de_compras(ses, idents, erros):
sys.stderr.write(str(idents))
sep = "<br/><hr/>" # Separador de blocos de compras.
botao_nova_compra = gera_html_botao.simples("Nova Compra", 'nova_compra', None, '#eeeeee'),
todas_cmprs = ""
for id_item in idents:
cmpr = itens_de_compra.busca_por_identificador(id_item)
bloco_compra = gera_html_elem.bloco_de_compra(cmpr, False)
todas_cmprs = todas_cmprs + sep + bloco_compra
pagina = generica(ses, botao_nova_compra[0]+todas_cmprs + sep, erros)
return pagina