TimeZone Flask

218 views
Skip to first unread message

ws

unread,
Sep 23, 2015, 9:49:06 PM9/23/15
to Python Brasil
Senhores boa noite.

Com estas poucas linhas de comando eu consigo fazer a tradução para o portugues.

the_locale = 'pt_BR'

@babel.localeselector
def select_locale():
    return the_locale

Já para as datas , não tive êxito, alguém poderia dar uma ajuda. Gostaria de deixar em toda aplicação a data com formato dd/mm/yyyy

the_timezone = 'Brazil/DeNoronha'
    
@babel.timezoneselector
def select_timezone():
    return the_timezone

ws

unread,
Sep 25, 2015, 1:19:27 PM9/25/15
to Python Brasil
Turma consegui resolver em parte o problema, pelo menos na visualização dos registros com column_type_formatters.

ws

unread,
Sep 30, 2015, 9:17:07 PM9/30/15
to Python Brasil
Turma fazendo uma pesquisa mais bem detalhada percebi que o babel , não tem o pt_BR, na lista de LOCALE_ALIASES.

Algum de vocês trabalha com babel e Flask ?

Paul Eipper

unread,
Oct 1, 2015, 12:18:29 AM10/1/15
to python-brasil
O babel importa os dados do [CLDR], o fato de não ter alias ali não é
problema, ele apenas indica se for passado 'pt' para usar 'pr_PT'.

O formato de data não se chama TimeZone, mas sim Date Format. A função
usada é [flask.ext.babel.format_date]. Ele vai usar o locale
configurado no request, no seu caso o retorno da função
`select_locale`, para formatar os dados.

Exemplo:
"""
import datetime
from flask.ext import babel

@app.route('/date')
def get_date():
d = datetime.datetime.now()
return babel.format_date(d)

"""

[format_date docs]:
https://pythonhosted.org/Flask-Babel/#flask.ext.babel.format_date
[format_date source]:
https://github.com/python-babel/flask-babel/blob/62c290fba3c38a9974bad4398980c908b4600a59/flask_babel/__init__.py#L322
Exemplos: https://pythonhosted.org/Flask-Babel/#formatting-dates

[CLDR]: http://cldr.unicode.org/
Pode confirmar a lista de timezones em Português navegando em:
http://www.unicode.org/cldr/charts/28/verify/zones/pt.html

--
Paul Eipper
> --
> --
> ------------------------------------
> Grupo Python-Brasil
> http://www.python.org.br/wiki/AntesDePerguntar
>
> <*> Para visitar o site do grupo na web, acesse:
> http://groups.google.com/group/python-brasil
>
> <*> Para sair deste grupo, envie um e-mail para:
> python-brasi...@googlegroups.com
>
> ---
> Você recebeu essa mensagem porque está inscrito no grupo "Python Brasil" dos
> Grupos do Google.
> Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie
> um e-mail para python-brasi...@googlegroups.com.
> Para mais opções, acesse https://groups.google.com/d/optout.

ws

unread,
Oct 1, 2015, 4:15:07 PM10/1/15
to Python Brasil
Valeu Paul Eipper, agora que tomei conhecimento que existem duas classes : flask_babel e flask_babelex

Acredito que tenho de usar a babelex que é a ext do babel.

Na minha ingenuidade pensei que este codigo abaixo resolveria o problema e todas as datas já seriam impressas em nosso formato.

def en_locale():
    return 'pt_BR'

def user_tz():
    return 'America/Sao_Paulo'

babel = Babel(app, default_locale='pt_BR', default_timezone='America/Sao_Paulo')

babel.localeselector(en_locale)
babel.timezoneselector(user_tz)

Como estou utilizando o Flask-Admin, talvez por isto esteja tendo um pouco mais de dificuldade.


Clodonil Trigo

unread,
Oct 2, 2015, 1:22:11 PM10/2/15
to python...@googlegroups.com
Ws,

Olá conseguiu resolver. Estou precisando com o mesmo problema.

Clodonil H. Trigo

ws

unread,
Oct 2, 2015, 3:12:10 PM10/2/15
to Python Brasil
Opa Clodonil, rapaz fiz umas soluções paleativas, sobre campos float e data, utilizei estes comandos :

def date_format(view, value):
    return value.strftime('%d/%m/%Y')

def currency_format(view, value):
    return moeda_brasileira(format(value,'.2f'))
 
def moeda_brasileira(numero):
    try:
        contador = 0
        preco_str = ''
        num = numero.__str__()
        print num
        if '.' in num:
            preco, centavos = num.split('.')
        else:
            preco = num
            centavos = '00'
 
        tamanho = len(preco)
        while tamanho > 0:
            preco_str = preco_str + preco[tamanho-1]
            contador += 1
            if contador == 3 and tamanho > 1:
                    preco_str = preco_str + '.'
                    contador = 0
            tamanho -= 1
 
        tamanho = len(preco_str)
        str_preco = ''
        while tamanho > 0:
            str_preco = str_preco + preco_str[tamanho-1]
            tamanho -= 1
 
        return "%s,%s" % (str_preco, centavos)
        #return "R$ %s,%s" % (str_preco, centavos)
    except:
        return 'Erro. Nao foi possivel formatar.'

MEU_DEFAULT_FORMATTERS = dict(typefmt.BASE_FORMATTERS)
MEU_DEFAULT_FORMATTERS.update({
        type(None): typefmt.null_formatter,
        date: date_format, float: currency_format
    })

class CustomView(ModelView):
    list_template = 'list.html'
    create_template = 'create.html'
    edit_template = 'edit.html'
    page_size = 10
    create_modal = True
    edit_modal = True
    column_type_formatters = MEU_DEFAULT_FORMATTERS

Bem , com isso pelo menos na listagem os campos do tipo data e currency ficam em nosso formato bRASILEIRO. 

Agora estou pesquisando pra fazer duas coisas já na edição dos formulários, mostrar uma mask que possa permitir o usuário visualizar o valor correto tanto na data como valores monetários.

Caso você queira unir forças , obteriamos os resultados mais rápido.

Clodonil Trigo

unread,
Oct 2, 2015, 4:22:55 PM10/2/15
to python...@googlegroups.com
Cara, estou bem no começo do meu estudo com o flask. Mas podemos fazer alguma coisa juntos sim.

Clodonil H. Trigo

Reply all
Reply to author
Forward
0 new messages