-
Notifications
You must be signed in to change notification settings - Fork 4
/
Copy pathstatus.py
90 lines (66 loc) · 2.75 KB
/
status.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
#! /usr/bin/env python3
# coding: utf-8
"""
Permite informar no site do Calango se o hackerspace está aberto
ou fechado.
Disponibiliza uma interface em que o usuário diz se o Calango está
aberto ou fechado.
Acessa o site do Calango e verifica se ele está aberto ou fechado.
Se a situação informada no site for diferente da informada pelo
usuário, atualiza o site com a informação do usuário.
"""
### WIKI Lib
from wiki_api import CalangoWiki
wiki = CalangoWiki()
### GUI Lib
import urwid
def status_atual():
"""Verifica no site o status atual (aberto ou fechado)"""
return wiki.conteudo_pagina("status")
def muda_status(status):
"""Atualiza a wiki com o status selecionado"""
# TODO Verificar o status atual antes para evitar atualização desnecessária
wiki.atualiza_pagina('status', status)
def cria_menu(título, opções):
"""Interface do Urwid"""
corpo = [urwid.Text(título), urwid.Divider()]
for opção in opções:
botão = urwid.Button(opção)
# vincula o botão à chamada de escolhe_opção() passando a
# opção escolhida e o botão pressionado
urwid.connect_signal(botão, 'click', escolhe_opção, opção)
# desenha o botão
corpo.append(urwid.AttrMap(botão, None, focus_map='reversed'))
return urwid.ListBox(urwid.SimpleFocusListWalker(corpo))
def escolhe_opção(botão, escolha):
"""Ação disparada pela seleção de uma opção"""
response = urwid.Text(['Status alterado para ', escolha, '\n'])
muda_status(escolha)
botao_ok = urwid.Button('Ok')
# vincula o botão "Ok" ao seu callback
urwid.connect_signal(botao_ok, 'click', reinicia)
# inclui o botão "Ok" na janela
janela.original_widget = \
urwid.Filler(
urwid.Pile([response,
urwid.AttrMap(botao_ok, None,
focus_map='reversed')]))
def reinicia(button):
janela.original_widget = cria_janela()
def exit_program(button):
raise urwid.ExitMainLoop()
def cria_janela():
# janela contém menu
opções = 'Aberto Fechado'.split()
menu = cria_menu("Status Calango (%s)" % status_atual(), opções)
return urwid.Padding(menu, left=2, right=2)
def cria_interface(janela):
# tela é o widget principal do urwid e contém janela
return urwid.Overlay(janela, urwid.SolidFill(u'\N{MEDIUM SHADE}'),
align='center', width=('relative', 60),
valign='middle', height=('relative', 60),
min_width=20, min_height=9)
if __name__ == '__main__':
janela = cria_janela()
urwid.MainLoop(cria_interface(janela),
palette=[('reversed', 'standout', '')]).run()