Mostrando postagens com marcador python. Mostrar todas as postagens
Mostrando postagens com marcador python. Mostrar todas as postagens

sexta-feira, 11 de setembro de 2015

Dica rápida: configurar retools para usar redis em local fora do padrão

Sabe aquela besteirinha que te faz perder um tempão? Esta é uma delas.
O pacote retools fornece diversas ferramentas baseadas no Redis como filas de mensagens e cache. Que são as funcionalidades que tenho usado. Porém, ele procura pelo redis em seu local padrão: localhost:6379.
Isso me fez perder um tempão ao tentar montar um ambiente de testes em

Docker: não importava as alterações nas configurações, continuava o mesmo erro. Até ver no log que o erro era no retools e não no framework, perdi um bocado de tempo.
Ele ter uma configuração simples por padrão é uma boa, mas pode levar a erros bobos como este. Para resolver, é só fazer isto:

import redis
from retools import global_connection


global_connection.redis = redis.Redis(host='myhost', port=6379)


Para mais detalhes dos parâmetros, é só clicar aqui e ir direto para a documentação do Redis-py. ;)

Por hoje é só isso.



terça-feira, 25 de agosto de 2015

Dica rápida: Acessar repositórios do git na rede local no Docker


Bem, antes de começar a postagem. Estou um tanto atrasado com postagens aqui, estou escrevendo uma postagem longa, mas vou demorar um pouco pra terminar. Então, vou jogar pequenas dicas aqui conforme os problemas que eu for encontrando no serviço. Assim resolvo meus problemas e o de mais alguém que estiver na mesma situação.

O problema

Ao tentar usar o git clone para baixar um repositório na rede interna dentro de um container docker recebi este belo erro:
ssh: Could not resolve hostname git.internal: Name or service not known
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

quarta-feira, 27 de março de 2013

Django - Processadores de contexto

Sempre que vamos processar um template por meio de uma view precisamos especificar diversas variáveis em todas as views. Por exemplo, é uma boa prática especificar as urls completas nos templates ao invés de só o caminho relativo. Para isso, precisaríamos recuperar o endereço base do seu site em todas as views manualmente. Ou então, dados processados relativos ao usuário atual. Teríamos que, na melhor das hipóteses, chamar um mesmo método em todas as views. Não seria muito mais fácil especificar isso uma vez só e o django carregar isso como valores "globais" em suas views? Pois bem, é exatamente isso que os processadores de contexto fazem.

Os processadores de contexto te permitem especificar diversas variáveis que são definidas automaticamente em todos os contextos automaticamente - sem precisar ficar as especificando em cada chamada ao método render_to_response(). Mesmo que os valores armazenados por essas variáveis necessitem ser processados para serem gerados, ou recuperados de um banco de dados.


terça-feira, 26 de março de 2013

Django admin: inlines obrigatórios

Um problema recorrente nos projetos em que trabalhei com Django foi tornar inlines obrigatórios no admin. Fiz diversas gambiarras, conforme a situação,  para tentar resolver isso, mas nunca havia encontrado uma forma satisfatória de resolver esse problema, até agora. Pois sabemos como os usuários são: você avisa que se não fizer de tal modo vai dar problema. O que acontece? Eles ignoram, isso causa um monte de problema e, claro, no final nós desenvolvedores somos os culpados. Enfim.

Depois de bastante tempo de procura, acabei caindo nesta discussão sobre o assunto que me levou a um snippet, um fragmento de código, que resolve o problema. O código a seguir foi obtido aqui. Ele altera o comportamento padrão da classe BaseInlineFormSet que é usada pelo admin para montar seus formulários, fazendo com que obrigue o usuário a salvar ao menos um inline.

domingo, 10 de março de 2013

Como gerar sitemaps a partir dos modelos do Django

Antes de qualquer coisa, o que é um sitemap?

É um formato de arquivo XML, definido aqui, que possui links para as páginas do seu site. Seu objetivo é facilitar o trabalho dos crawlers (bots de sistemas de busca que varrem os sites para indexação de conteúdo). Um dos critérios principais que todo crawler usa é não dar muita relevância para páginas muito profundas do seu site, ou melhor, páginas em que o usuário deve clicar em muitos links para chegar. Para essas páginas o sitemap é especialmente importante, pois ele ajuda a dar uma relevância muito maior a essas páginas, que poderiam ser consideradas pouco significantes para o crawler.

Sitemaps também facilitam muito o trabalho dos crawlers, os quais vão poder indexar um volume grande de páginas de seu site rapidamente, pois não vão precisar ficar varrendo página por página em busca de links. Porém, para sites muito grandes é aconselhável fazer múltiplos sitemaps, divididos em seções, para que não haja muitos links em uma página.

terça-feira, 29 de janeiro de 2013

Sites com vários idiomas em Django - Rosetta

Já faz algum tempo que entrei em contato com um pacote chamado Rosetta. Mas não mexi com ele. Fiz tudo que precisava no sistema e ficou esquecido lá. Só agora que fui trabalhar com ele de novo. E o achei que interessante.
Como o nome sugere, o Rosetta serve para tradução em vários idiomas. Como ele faz a tradução? Ele gerencia os arquivos de tradução do django. O que deixa tudo muito mais organizado e fácil de traduzir, pois tudo que você vai precisar fazer é preencher os campos para tradução no admin do Rosetta. Bem mais simples que lidar diretamente com os arquivos de idioma do Django, não é mesmo?

Antes de usarmos o Rosetta, precisamos gerar os arquivos de tradução do Django. Isso pode ser feito automaticamente. Primeiro, temos que configurar algumas coisas no settings.py. Pra começar temos que ativar o módulo i18n, que é o módulo de internacionalização do Django. Pelo que notei até na versão 1.4 do Django já vem ativado, caso não, ative-o no seu settings.py:
USE_I18N = True

sexta-feira, 9 de novembro de 2012

Django - Como ocultar condicionalmente inlines no admin?

Esta semana precisei fazer uma coisa no admin do Django que fazia tempo que tentava e não conseguia: ocultar os inlines condicionalmente. Ou melhor, queria só exibi-los para objetos existentes e ocultá-los para um objeto sendo criado. Ou qualquer outra condição que surgisse, até então, só exceções e decepções.
Sempre soube que é possível de ocultar os campos, mas e os benditos inlines? Todas as soluções que encontrei até hoje não resolviam isso. Ajudavam bastante, ou eram tão complicadas, que eram inviáveis de serem colocadas em prática. O que me salvou foi esta dica aqui que me deu as orientações de que precisava.

quarta-feira, 26 de setembro de 2012

Django - Como obter a URL atual

Este é mais um post rápido. Porém, sobre uma coisa que sempre procurei por aí e nunca encontrei uma boa resposta. Sempre tinha que fazer alguma gambiarra. Mas esses tempos negros se foram. Finalmente, sem querer, encontrei a resposta para essa pergunta. É claro que também vou listar as soluções gambiarrentas, pois nunca se sabe quando uma delas pode vir a ser útil.

terça-feira, 28 de agosto de 2012

Django: miudagens úteis

Sabe aquelas miudagens que temos que fazer com frequência, mas não tanta frequência assim? Claro que tempo o suficiente para não lembrarmos direito como fazer, ter que pesquisar quase tudo de novo, perder aquele baita tempo pra chegar num "Nossa! Não lembrava que era tão simples."?

Bem, é esse tipo de miudagem que vou listar neste post. Para montá-lo fui adicionando a ele todas as miudagens de que precisei várias nos últimos tempos e acabei tendo de pesquisar de novo para relembrar como fazer. Tem mais algumas que adicionei por serem coisas miúdas, mas difíceis de encontrar a solução por aí.

sexta-feira, 27 de julho de 2012

Post rápido: como instalar mysql-python no Linux

A biblioteca mysql do python sempre dá problemas na instalação. É muito difícil instalá-la sem encontrar nenhum problema no caminho. O problema que enfrentei foi um problema, que pelo que pesquisei, muito comum. E são poucas as soluções. A maioria delas não funcionaram aqui. Bem, vamos começar pelo início do problema.

terça-feira, 10 de julho de 2012

Python - Problemas com a biblioteca PIL

Esses dias houve um problema no servidor e tivemos que reinstalar o python e todos os seus pacotes. E, claro, alguns erros começaram a acontecer. Em especial, problemas com a PIL (Python Imaging Library). Os quais vamos tratar aqui.

quarta-feira, 30 de maio de 2012

Como configurar o django-celery

Aqui vou explicar como instalar o django-celery, seus requisitos e como configurá-lo. Pois, para variar, foi necessário consultar uma infinidade de fontes para aproveitar uma linha ou duas de cada uma.  Sim, isso torra o ** é chato demais e perdemos muito tempo. =/
Comecemos.

O que é o django-celery?

O django-celery é um pacote para o django para fornecer ao django as funcionalidades do Celery. O qual se trata de uma ferramenta distribuída para gerenciamento de tarefas.
Retirado do site do Celery:
O Celery é uma ferramenta para gerenciamento de fila de tarefas assíncronas baseado em passagem de mensagens distribuídas. Seu foco é em operações em tempo real, mas também suporta agendamento de tarefas.
Suas unidades de execução, chamadas de "tarefas", são executadas concorrentemente em um ou mais servidores usando multiprocessamento, Eventlet, ou gevent. As tarefas podem ser executadas de forma assíncrona (no plano de fundo) ou de forma síncrona (esperar até que esteja pronta).

Celery é escrito em Python, mas seus protocolos podem ser implementados em qualquer linguagem. Ele também pode trabalhar com outras linguagens usando "webhooks". Sem contar que há o RCelery feito para Ruby e funciona como cliente PHP.
O gerenciador de mensagens padrão/recomendado é o RabbitMQ, mas fornece suporte para Redis, MongoDB, Beanstalk, Amazon SQS, CouchDB e bancos de dados (usa SQLAlchemy ou o Django ORM).
Em miúdos: é um anacron com ferramentas para trabalho distribuído e integrável a várias ferramentas.

domingo, 27 de maio de 2012

Cálculo online de frete utilizando python

Este post foi escrito em 20/10/11: quando a greve dos correios estava terminando.
Sim, soa estranho começar o texto com isso, mas continue lendo que você vai entender. ;)

Estes dias no serviço, estávamos desenvolvendo um e-commerce e precisávamos fazer o cálculo do frete para envio de encomendas utilizando os serviços PAC e SEDEX dos correios.

Até aí, tudo bem. Peguei as especificações no site dos Correios e comecei a implementar.
Inicialmente o que me deu mais trabalho foi aprender a ler arquivos XML. Aliás, primeiro foi encontrar um pacote bom para ler XML. No fim das contas encontrei um site com vários exemplos utilizando o minidom. Além de consultar a documentação oficial para alguns detalhes.
De qualquer forma, depois de diversos testes e tentativas nos servidores dos exemplos e constatar que estava funcionando tudo direitinho, fomos para os testes no servidor dos Correios...

Bem, creio eu que não preciso dizer o quão