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

segunda-feira, novembro 15, 2010

Testes em Python

Dica postada na lista Python-Brasil pelo Luciano Ramalho:

Todo mundo sabe que escrever testes automatizados faz bem.

Começar é fácil, o difícil é persistir porque às vezes não sabemos
como escrever determinados tipos de testes, ou escrevemos de um jeito
que acaba dando muito trabalho depois.

Aqui vão várias dicas excelentes:

Pylons Unit Testing Guidelines
http://docs.pylonshq.com/community/testing.html

Outras dicas nessa linha são sempre bem vindas!

--
Luciano Ramalho

sexta-feira, novembro 05, 2010

[divulgação] Semana de tecnologia FATEC/UNIC

Começa dia 08/11 até 12/11 a semana de tecnologia da FATEC na UNIC Beira Rio.

Pra saber mais: http://www.unic.br/site/index.php?pg=comunicando

Eu irei ministrar o curso de Python dia 08/11.

quinta-feira, outubro 14, 2010

Rapidez na distribuição da aplicação e CouchDB! Por Luciano Ramalho (python-brasil)

Mensagem da lista Python-Brasil por Luciano Ramalho.

Eu ia falar sobre o quickly na minha palestra na PythonBrasil, mas
como tive que cancelar, resolvi compartilhar com vocês uma das
melhores descobertas que fiz ao pesquisar para a palestra.

Desde 2009 existe essa jóia pouco divulgada do projeto Ubunto chamada
Quickly [1]. Basicamente é um script e bibliotecas para ajudar você a
desenvolver, empacotar e publicar aplicações desktop com GUI para
rodar no Linux.

O script quickly funciona como o django-admin.py: você dá comandos e
ele gera diretórios e arquivos para te ajudar a começar a montar a
aplicação. O script quickly também se integra ao sistema de controle
de versão Bazaar e ao repositório de código Lauchpad, tornando a
divulgação do seu trabalho muito simples.

Docs oficiais:
[1] https://wiki.ubuntu.com/Quickly

Video demonstrando:
[2] http://www.youtube.com/watch?v=9EctXzH2dss

Pequenas receitas de código, muito úteis para principiantes em Python:
[3] https://wiki.ubuntu.com/Quickly/Snippets

Resenha:
[4] http://arstechnica.com/open-source/news/2009/08/quickly-new-rails-like-rapid-development-tools-for-ubuntu.ars

O que isso tem a ver com o tema "NoSQL para projetos de qualquer
tamanho", o título da minha palestra? Boa pergunta!

Tem tudo a ver. A API oferecida pelo Quickly integra com o
DesktopCouch, o CouchDB que vem instalado no Ubuntu Desktop desde a
versão 9.10. Nada mais racional como mecanismo de persistência para
pequenas aplicações do que um banco de dados orientado a documentos.

Vejam este exemplo, da página de snippets [3]:

########
from desktopcouch.records.server import CouchDatabase
from desktopcouch.records.record import Record as CouchRecord

db = CouchDatabase("dbname", create=True)
record = CouchRecord(
  {"a": 1, "b": 2}, record_type="http://recordtypeurl",
  record_id=XXX)
db.put_record(record)
########

Note que o conteúdo do registro é um dicionário, e pode ser tão
complexo quanto você queira, com listas e mais dicionários aninhados.
Nada de lidar com relacionamentos, tabelas de ligação e toda aquela
complicação ditada pelo modelo relacional normalizado.

--
Luciano Ramalho
programador repentista || stand-up programmer
Twitter: @luciano

domingo, outubro 10, 2010

Interagindo Python com SQLite




import sqlite3
conn = sqlite3.connect('/temp/bdpython.sqlite')
c = conn.cursor()
c.execute('''create table python (id int, data text, descricao text, valor real)''')
c.execute('''insert into python values (1, '2010-01-10', 'Meu primeiro registro', 10000)''')
conn.commit()
c.execute('''select * from python''')
for row in c:
# na linha abaixo tem indentação, lembre-se o python usa-a para definir blocos
 print row
c.close()
(1, u'2010-01-10', u'Meu primeiro registro', 10000.0)

terça-feira, setembro 21, 2010

Abrir uma URL via Python



>>> import webbrowser
>>> webbrowser.open('http://dropsdef.blogspot.com/')


fonte: http://www.doughellmann.com/PyMOTW/webbrowser/index.html

quinta-feira, agosto 19, 2010

Python Logging - Outro exemplo de log com gravação da excessão

Matt Wilson mostra como evoluir um sistema de logs e a versão final esta a seguir:

import logging, logging.handlers

# Make a global logging object.
x = logging.getLogger("logfun")
x.setLevel(logging.DEBUG)

# This handler writes everything to a file.
h1 = logging.FileHandler("/var/log/myapp.log")
f = logging.Formatter("%(levelname)s %(asctime)s %(funcName)s %(lineno)d %(message)s")
h1.setFormatter(f)
h1.setLevel(logging.DEBUG)
x.addHandler(h1)

# This handler emails me anything that is an error or worse.
h2 = logging.handlers.SMTPHandler('localhost', 'logger@tplus1.com', ['matt@tplus1.com'], 'ERROR log')
h2.setLevel(logging.ERROR)
h2.setFormatter(f)
x.addHandler(h2)

def g():

    1/0

def f():

    logfun = logging.getLogger("logfun")

    logfun.debug("Inside f!")

    try:

        g()

    except Exception, ex:

        logfun.exception("Something awful happened!")

    logfun.debug("Finishing f!")

if __name__ == "__main__":
    f()


fonte: http://blog.tplus1.com/index.php/2007/09/28/the-python-logging-module-is-much-better-than-print-statements/

quarta-feira, agosto 18, 2010

Esteganografia com Python

Photos

There may be a message hidden in this picture. Or not. Flickr photo by John C Abell
Georgia Tech researchers have developed a tool called Collage that will allow Internet dissidents to insert hidden messages into Twitter posts and Flickr images in order to circumvent the censorship measures imposed by oppressive governments.
‘This project offers a possible next step in the censorship arms race’
The tool, which is implemented in Python and uses the OutGuess framework, relies on a technique known as steganography to weave hidden messages into an image file. It uses an automated testing tool called Selenium to facilitate the deployment of the messages. The researchers believe that hiding subversive messages inside content that is indistinguishable from legitimate social network activity will reduce the chances of detection.
“This project offers a possible next step in the censorship arms race: rather than relying on a single system or set of proxies to circumvent censorship firewalls, we explore whether the vast deployment of sites that host user-generated content can breach these firewalls,” the project’s website explains. “We have developed Collage, which allows users to exchange messages through hidden channels in sites that host user-generated content.”

It’s worth noting that steganography is one method that was used by the Russian spy ring that was recently detected operating within the United States. As we noted last month, a lot of government surveillance is driven by automated keyword-matching and pattern analysis methods that do broad sweeps, but are blind to simple tricks like steganography. Obscuring the substance of a message in an image and deploying it in a nonthreatening and high-volume medium like a social network would make it harder to find.
The Collage software will be released soon and will be published on the Georgia Tech Network Operations and Internet Security (GTNoise) website.

link: http://www.wired.com/epicenter/2010/08/beat-censorship-by-hiding-secret-messages-in-flickr-photos/

sexta-feira, agosto 06, 2010

Python Logging - Como implementar um sistema de log na sua aplicação

Tenho a necessidade de colocar um script para funcionar em um servidor público que não tenho acesso senão via browser/aplicação cedida pelo hospedeiro.
A forma que encontrei foi o de logar todas as ocorrências. Como Python tem o módulo logging resolvi procurar e encontrei um exemplo funcional. Em tempo, ele não fazia rotação de log, o que é importante para o arquivo não crescer demasiadamente segue a devida alteração.

Desculpe pela falta de syntaxhighlighting pq troquei o "desenho" do blog e o recurso acabou se perdendo.

#!/usr/bin/python

import logging
import logging.handlers

def configure_logger(log_file):
    """Accepts a fully-qualified filename to the log file.

    Returns a fully-configured logger object.
    """
    logger = logging.getLogger('ProgramName')
    log_formatter = logging.Formatter('%(created)-13s %(asctime)s Pid:%(process)s %(levelname)s %(message)s Thread:%(thread)s Thread Name:%(threadName)s Name:%(name)s File:%(filename)s Module: %(module)s Function Name:%(funcName)s')
    file_handler = logging.handlers.RotatingFileHandler(log_file, maxBytes=1024, backupCount=5)            
    #file_handler = logging.FileHandler(log_file)
    file_handler.setFormatter(log_formatter)
    logger.setLevel(logging.DEBUG)    
    logger.addHandler(file_handler)
    return logger

if __name__ == "__main__":
    LOG = configure_logger('logfile.txt')
    LOG.debug('This is debug level')
    LOG.info('This is info level')
    LOG.warning('This is warning level')
    LOG.error('This is error level')   
    LOG.critical('This is critical level')


fontes:
http://schof.org/2010/basic_python_logging/
http://schof.org/basic_python_logging.py

sábado, novembro 14, 2009

Erro no nome de arquivo (email em Python)

A função anterior de envio de email funcionou no Windows (desktop), qdo enviei para o servidor (linux SLES10), retornava erro que não encontrava o módulo MIMEMultipart.

Perceba o nome do arquivo, o mesmo do módulo no Python, conflitando e ocasionando o erro.

Traceback (most recent call last):
File "./email.py", line 4, in ?
import smtplib File "/usr/lib/python2.4/smtplib.py", line 49, in ?
from email.base64MIME import encode as encode_base64
File "/srv/trabalho/informatica/desenvolvimento/sislinux/amadeus/SWNF/email.py", line 5, in ?
from email.MIMEMultipart import MIMEMultipart
ImportError: No module named MIMEMultipart

Cheguei até a pensar que não havia instalado o módulo. Mas pesquisando na internet deparei com o site que solicitou a verificação do nome do módulo.

Nome do arquivo alterado e: Bingo, funcionou!

quarta-feira, novembro 11, 2009

Juntar vários PDF´s num só (Python)

Dica interessante do Eloi:

http://eloiribeiro.wordpress.com/2008/08/31/juntar-varios-pdfs-num-unico-ficheiro-com-ubuntu/

Envio de email autenticado e com anexo em Python

Posto abaixo um exemplo que funcionou:

# -*- coding: utf-8 -*-
import os
import smtplib
from email.MIMEMultipart import MIMEMultipart
from email.MIMEBase import MIMEBase
from email.MIMEText import MIMEText
from email import Encoders

def enviar_correio(de, senha, smtp, para, assunto, mensagem, anexo):
 msg = MIMEMultipart()
 msg['To'] = para
 msg['Subject'] = assunto
 msg['From'] = de
 msg['Pass'] = senha
 msg['SMTP'] = smtp
 if mensagem != '':
  msg.attach(MIMEText(mensagem))
 part = MIMEBase('application', 'octet-stream')
 if anexo != '':
  part.set_payload(open(anexo, 'rb').read())
  part.add_header('Content-Disposition', 'attachment; filename="%s"' %  os.path.basename(anexo))
 msg.attach(part)
 Encoders.encode_base64(part)
 mailServer = smtplib.SMTP(msg['SMTP'], 587)
 mailServer.ehlo()
 mailServer.starttls()
 mailServer.ehlo()
 mailServer.login(msg['From'], msg['Pass'])
 mailServer.sendmail(msg['From'], para, msg.as_string())
 mailServer.close()
 print 'Correio enviado'

# exemplo para enviar correio sem mensagem e sem anexo
# enviar_correio('correio_destino@servidor.com', 'assunto', '', '')
# exemplo para enviar correio com mensagem e com anexo
# enviar_correio('correio_destino@servidor.com', 'assunto', 'mensagem', '/home/utilizador/anexo.pdf')
enviar_correio('login@dominio.com.br','senha','smtp.dominio.com.br','destino@dominio.com.br','Envio de email em Python','Aqui a mensagem do email','/caminho/arquivo.ext')

retirado de: http://eloiribeiro.wordpress.com/2009/05/25/como-enviar-um-correio-electronico-com-python/

quarta-feira, outubro 21, 2009

XML (Python+Amara)

Tai uma duplinha que depois de instalado e/ou acertado se dão muito bem, XML e Python com Amara.

No site http://www.xml.com/pub/a/2005/01/19/amara.html tem ótimos exemplos pra iniciar.