Ir al contenido principal

Ralsina.Me — El sitio web de Roberto Alsina

Publicaciones sobre python (publicaciones antiguas, página 30)

A simple memcache memoizer for python>=2.2

Just a snip­pet of code be­cause ev­ery once in a while I need some­thing like the clas­sic mem­o­ize dec­o­ra­tor but am work­ing on a Cen­tOS 4 bix (with python 2.3!)

I am still test­ing it, and am not even sure it re­al­ly work­s, but it should be close.

cache=memcache.Client(['127.0.0.1:11211'], debug=0)
cachetimeout=30

def memoize(fun):
    def inner(*args, **kwargs):
        key=repr(fun)+repr(args)+repr(kwargs)
        cached = cache.get(key)
        if cached is None:
            val = fun(*args, **kwargs)
            print "Setting: ",key, "to: ",val
            cache.set(key,val,cachetimeout)
            return val
        return cached
    return inner

And lat­er in­side a class:

def myfun(self,arg):
   :
   :
myfun=memoize(myfun)

And that's it. The ba­sic idea I stole from a blog who was in­spired by a Paul Gra­ham book. It can be triv­ial­ly turned in­to a dec­o­ra­tor, of course (but then on­ly works on 2.4 and lat­er).

Extraño bug con Django/PyODB

Pa­ra lo­guear un usua­rio se pue­de ha­cer al­go así:

[root@wally app]# python manage.py shell
Python 2.3.4 (#1, May  2 2007, 19:26:00)
[GCC 3.4.6 20060404 (Red Hat 3.4.6-8)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from pyodb import *
>>> import django.contrib.auth
>>> print django.contrib.auth.authenticate(username='user',password='pass')
user

Y des­pués se usa el ob­je­to user pa­ra djan­go­.­con­tri­b.au­th.­lo­gin

Una par­te de los da­tos de au­ten­ti­ca­ción es­tán dis­po­ni­bles en un Mi­cro­so­ft SQL Ser­ve­r, y los ob­ten­go via pyo­db. Y es­to es lo que su­ce­de cuan­do tra­to de au­ten­ti­car el usua­rio (a­su­ma­mos que user y pa­ss son vá­li­do­s, es­to es el frag­men­to más pe­que­ño que dis­pa­ra el bu­g):

[root@wally app]# python manage.py shell
Python 2.3.4 (#1, May  2 2007, 19:26:00)
[GCC 3.4.6 20060404 (Red Hat 3.4.6-8)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from pyodb import Connect
>>> import django.contrib.auth
>>> c1=Connect("moodle_emisql",uid="gruposintramed",pwd="yev431")
>>> print django.contrib.auth.authenticate(username='user',password='pass')
None

Com pue­den ve­r, lo del pyo­db no de­be­ría in­ter­fe­rir con lo de djan­go. Im­por­to so­lo una fun­ción y co­nec­to con la BB­DD, ni si­quie­ra eje­cu­to na­da de SQ­L, no uso nin­gún da­to bte­ni­do de la co­ne­xión SQ­L. Pe­ro las lla­ma­das a au­then­ti­ca­te fa­llan.

¿Co­mo se su­po­ne que uno de­pu­ra es­to? Me las arre­glé mo­vien­do lo de PyO­DB a otro mó­du­lo pe­ro es ra­ro.

Presentaciones en modo texto

Ya que me gus­ta el res­truc­tu­red text y Py­Q­t, es­tá ba­sa­do en eso, pe­ro se pue­de usar con vi y una wyse60.

Mi pro­yec­to se lla­ma To­bo­gan y se pue­de des­car­ga­r, y fun­cio­na has­ta cier­to pun­to.

Tie­ne una in­ter­fa­ce grá­fi­ca, pe­ro ig­no­ré­mos­la en es­te men­sa­je acer­ca de so­ftwa­re en mo­do tex­to ;-) y mos­tre­mos el tex­to que tie­ne atrá­s.

===============
Why use Tobogan
===============

-------------------
(If you are a nerd)
-------------------

:transitions: from_left,to_left,from_top,to_top,from_right,to_right,to_bottom,fade_out



It's nerd-oriented
------------------

It's trivial to display source code, with
proper syntax highlighting.

.. code-block:: python

    from base64 import *
    def myFirstFunction():
          print b64decode ('YnllIHdvcmxkIQ==')

Even for things like shell sessions.
Dammit, I am a nerd, I will try to add every nerd
feature I deem cool.



It does things simply
---------------------

This is a subtitle?
===================

Wanna show a flickr photo?

.. code-block:: rst

    .. flickr:: myPhotoTitle

How about using openomy.com to share your files?
And whatever else you can think of, it probably
**can**\  be done.

.. footer:: Smart thing goes here

Y aquí es­tá el re­sul­ta­do des­pués de co­rrer el script rs­t2s­l.­p­y.

Pis­ta­s:

  • Si el cu­r­­sor se mue­­ve ha­s­­ta la pa­r­­te su­­pe­­rior de la ven­­ta­­na, se pue­­de ver fle­­chas de an­­te­­rio­­­r/­­si­­guien­­te.

  • Si se ha­­ce cli­­ck en la ven­­ta­­na, se va a la si­­guien­­te pá­­gi­­na.

ha­ce ca­si un año que no lo to­co, y ne­ce­si­ta mu­cho ca­ri­ño, pe­ro no es una ma­la idea, me pa­re­ce.

Abrir con: Google Docs

De he­cho, los úni­cos do­cu­men­tos que re­ci­bo son men­sa­jes de error de usua­rios de win­do­ws. És­te es el pro­ce­di­mien­to que ca­da uno de ellos ha en­contra­do pa­ra de­cir­me que di­ce en una pá­gi­na de error de Ex­plo­re­r:

  1. Ca­p­­tu­­rar la pan­­ta­­lla

  2. Pe­­ga­r­­la en word

  3. En­­viá­r­­me­­la por email

Su­pon­go que co­piar y pe­gar el con­te­ni­do de la pá­gi­na es de­ma­sia­do di­fí­ci­l. Pe­ro de to­das for­ma­s, nor­mal­men­te me las arre­glo te­nien­do kword o abiword a ma­no, pe­ro es­ta­ba pen­san­do­...

Estoy leyendo mi mail. Eso quiere decir que tengo Internet. Eso quiere decir que google docs está ahí. ¡Y tienen un API en Python! 15 minutos después... open_with_gdocs.py

#!/usr/bin/env python
import gdata.docs.service,gdata,sys,os

# Create a client class which will make HTTP requests with Google Docs server.
client = gdata.docs.service.DocsService()
# Authenticate using your Google Docs email address and password.
client.ClientLogin('joe@gmail.com', 'whateveritis')

ms = gdata.MediaSource(file_path = sys.argv[1], content_type = "application/msword")
entry = client.UploadDocument(ms,"tmp_open_with_gdocs/%s"%sys.argv[1])
os.system("firefox '%s'"%entry.GetAlternateLink().href)

Prué­ben­lo. Mien­tas ten­gas fi­re­fo­x, una ver­sión de­cen­te de py­thon y gda­ta de­be­ría abrir el .doc que se le pa­se co­mo pri­mer ar­gu­men­to en google do­cs usan­do fi­re­fo­x.

Re­cuer­den que hay que bo­rrar­lo si no quie­ren que que­de allí, y re­nom­brar­lo si quie­ren guar­dar­lo con un nom­bre acep­ta­ble.

No lo voy a con­ver­tir en una apli­ca­ción rea­l, pe­ro a mí me sir­ve. Se po­ne en el pa­th, se lo aso­cia con los ar­chi­vos .doc y fun­cio­na.

Un script si­mi­lar pa­ra .xls o pa­ra am­bos ti­pos de ar­chi­vo es tri­via­l.

Po­dría al­guien to­mar es­to y con­ver­tir­lo en una apli­ca­ción de ver­da­d?

rst2pdf: Nuevo y mejorado

  1. Hay otra pe­r­­so­­­na ayu­­dan­­do: Ch­­ris­­to­­­ph Zwer­s­­chke

  2. Es­­tá en google­­co­­­de: http://r­s­­t2­­pdf.­­google­­co­­­de.org

  3. Ch­­ris­­to­­­ph im­­ple­­men­­tó va­­rias me­­jo­­­ras (es el chan­­ge­­log no lo voy a tra­­du­­cir ;-):

    • bu­­­lle­ted and enu­­­me­­­ra­ted list si­­m­­­pli­­­fie­­­d, use sa­­­me font as text for bu­­­lle­­­ts and nu­­m­­­bers

    • li­nks in ta­­­ble of co­­n­­­ten­­­ts wo­­­­­rk

    • co­­­m­­­press li­­­te­­­ral se­­c­­­tions ho­­­­­ri­­­zo­­n­­­ta­­­lly so that they alwa­­­ys fit on the pa­­­ge

  4. In­­te­­gré guio­­­na­­do (a­sí se di­­ce hy­­phe­­na­­tio­­n?) usan­­do wo­r­­da­­xe (fun­­cio­­­na so­­­lo con re­­po­r­­tlab 2.1)

El re­sul­ta­do usan­do wor­da­xe es bas­tan­te feo aho­ra (por ejem­plo, veo un cua­dra­do ne­gro en vez de un guió­n) pe­ro es un pa­si­to ade­lan­te.


Contents © 2000-2023 Roberto Alsina