collecting results in threading app

2008-04-04 Thread Gerardo Herzig
Hi all. [EMAIL PROTECTED] over here. Im missing some point here, but cant 
figure out which one.

This little peace of code executes a 'select count(*)' over every table 
in a database, one thread per table:
code
class TableCounter(threading.Thread):
def __init__(self, conn, table):
self.connection = connection.Connection(host=conn.host, 
port=conn.port, user=conn.user, password='', base=conn.base)
threading.Thread.__init__(self)
self.table = table

def run(self):
result =  self.connection.doQuery(select count(*) from %s % 
self.table, [])[0][0]
print result
return result


class DataChecker(metadata.Database):

def countAll(self):
for table in self.tables:
t = TableCounter(self.connection, table.name)
t.start()
return
/code

It works fine, in the sense that every run() method prints the correct 
value.
But...I would like to store the result of t.start() in, say, a list. The 
thing is, t.start() returns None, so...what im i missing here?
Its the desing wrong?

thanks!

Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: collecting results in threading app

2008-04-04 Thread Gerardo Herzig
John Nagle wrote:

Gerardo Herzig wrote:
  

Hi all. [EMAIL PROTECTED] over here. Im missing some point here, but cant 
figure out which one.

This little peace of code executes a 'select count(*)' over every table 
in a database, one thread per table:
code
class TableCounter(threading.Thread):
   def __init__(self, conn, table):
   self.connection = connection.Connection(host=conn.host, 
port=conn.port, user=conn.user, password='', base=conn.base)
   threading.Thread.__init__(self)
   self.table = table

   def run(self):
   result =  self.connection.doQuery(select count(*) from %s % 
self.table, [])[0][0]
   print result
   return result


class DataChecker(metadata.Database):

   def countAll(self):
   for table in self.tables:
   t = TableCounter(self.connection, table.name)
   t.start()
   return
/code

It works fine, in the sense that every run() method prints the correct 
value.
But...I would like to store the result of t.start() in, say, a list. The 
thing is, t.start() returns None, so...what im i missing here?
Its the desing wrong?



 1.  What interface to MySQL are you using?  That's not MySQLdb.
 2.  If SELECT COUNT(*) is slow, check your table definitions.
 For MyISAM, it's a fixed-time operation, and even for InnoDB,
 it shouldn't take that long if you have an INDEX.
 3.  Threads don't return results as such; they're not functions.


As for the code, you need something like this:

class TableCounter(threading.Thread):
def __init__(self, conn, table):
  self.result = None
  ...

 def run(self):
 self.result =  self.connection.doQuery(select count(*) from %s %
  self.table, [])[0][0]


 def countAll(self):
 mythreads = [] # list of TableCounter objects
   # Start all threads
 for table in self.tables:
 t = TableCounter(self.connection, table.name)
 mythreads.append(t) # list of counter threads
 t.start()
 # Wait for all threads to finish
 totalcount = 0
 for mythread in mythreads:# for all threads
   mythread.join() # wait for thread to finish
 totalcount += mythread.result # add to result
   print Total size of all tables is:, totalcount



   John Nagle
  

Thanks John, that certanly works. According to George's suggestion, i 
will take a look to the Queue module.
One question about

for mythread in mythreads:  # for all threads
mythread.join() # wait for thread to finish


That code will wait for the first count(*) to finish and then continues 
to the next count(*). Because if is that so, it will be some kind of 
'use threads, but execute one at the time'.
I mean, if mytreads[0] is a very longer one, all the others will be 
waiting...rigth?
There is an approach in which i can 'sum' after *any* thread finish?

Could a Queue help me there?
Thanks!

Gerardo

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: request for Details about Dictionaries in Python

2008-03-14 Thread Gerardo Herzig
Saideep A V S wrote:

Hello Sir,

   I am a beginner level programmer in Python. I am in search of a
function for 'On-Disk' Dictionaries which is similar to On-Disk Hash tables
in Perl (i.e., tie function in Perl).


  Could anyone help me with the concept. I have also searched the net, but
was not successful in finding any related.

Awaiting your Solutions.

Thanks in Advance.

Saideep

  

I guess you are looking for shelve
http://docs.python.org/lib/module-shelve.html

Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: request for Details about Dictionaries in Python

2008-03-14 Thread Gerardo Herzig
Saideep A V S wrote:

Hello Sir,

   Thank You a ton. I was looking for this function. As far what I've
understood from the Shelve module is that, there would be no memory
wastage and the whole transactions would be done from and to the file we
specify. Am I right?.

  My actual task is to build a basic dictionary for two languages and store
word and its meaning in another language in a file and must be able to
access it through on-disk Hash tables. as these would be saving memory space
for a huge data.

so, I hope shelve is the right one, I am searching for., I shall try out
with the function.


Thank You once again.

Cheers,
Saideep

  

Plz remember allways reply to the python group also. They are many many 
many ones to know more than i do!
Well, i dont quite think that it would be no memory wastage, since 
when you read/write from disk, there is memory involved in the process.

I *really* believe that, when data goes huge, a *real* database (like 
postgres, and others) has to come and play the game.

Hope that helps

Gerardo


-- 
http://mail.python.org/mailman/listinfo/python-list


compiling plpython compilation error

2008-03-03 Thread Gerardo Herzig
Hi all. Im having a hard time trying to compile the plpython package.
This is the error make gives me:

[EMAIL PROTECTED]:/usr/local/src/postgresql-8.2.5/src/pl/plpython make
gcc -O2 -Wall -Wmissing-prototypes -Wpointer-arith -Winline 
-Wdeclaration-after-statement -Wendif-labels -fno-strict-aliasing -fpic 
-shared -Wl,-soname,libplpython.so.0   plpython.o 
-L/usr/lib/python2.5/config -L../../../src/port -lpython2.5 -lpthread 
-ldl -lutil -lm -Wl,-rpath,'/usr/lib/python2.5/config' -o libplpython.so.0.0
/usr/lib64/gcc/x86_64-suse-linux/4.2.1/../../../../x86_64-suse-linux/bin/ld: 
/usr/lib/python2.5/config/libpython2.5.a(abstract.o): relocation 
R_X86_64_32 against `a local symbol' can not be used when making a 
shared object; recompile with -fPIC
/usr/lib/python2.5/config/libpython2.5.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
make: *** [libplpython.so.0.0] Error 1


This runs on OpenSuse 10.3.
python 2.5
postgres 8.2.5 ( and 8.3.0)

Any clues?
Thanks!

Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How to pass shell variable to shell script from python

2008-02-27 Thread Gerardo Herzig
Rockins Chen wrote:

Hi all,

I encountered a problem: I have a python script, let's just name it
caller.py, It calls a shell script, which is named callee.sh. In callee.sh,
it need a shell variable $target, which should be supplied by caller.py(cannot
pass by argument). I try to use os.environ to do this, as follows:

caller.py
--
#/usr/bin/python

import os

os.environ[target] = localhost.localdomain.org
os.putenv(target, localhost.localdomain.org)
os.system(./callee.sh)
---

callee.sh
---
#!/bin/bash

echo $target
exit 0


But, unluckily, it didn't work. What can I do?

TIA,


  

Well, if you have to use os.system, that could be
os.system(export target=localhost.localdomain.org; ./callee.sh)

Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Weird cgi error

2008-02-25 Thread Gerardo Herzig
Jesse Aldridge wrote:

I uploaded the following script, called test.py, to my webhost.
It works find except when I input the string python .  Note that's
the word python followed by a space.  If I submit that I get a 403
error.  It seems to work fine with any other string.
What's going on here?

Here's the script in action: http://crookedgames.com/cgi-bin/test.py

Here's the code:

#!/usr/bin/python
print Content-Type: text/html\n
print 
html
body
  form action=test.py method=post
textarea name=data
/textarea
  INPUT type=submit value=Submit
  /form
/body
/html

  

If you cant have access to the apache (?) error_log, you can put this in 
your code:
import cgitb
cgitb.enable()

Which should trap what is being writed on the error stream and put it on 
the cgi output.

Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: standardization allows?

2008-02-19 Thread Gerardo Herzig
[EMAIL PROTECTED] wrote:

Standardization allows RCA cables, bumpers, and 115V plugs.  The Bill
of Rights allows Huckleberry Finn.  What is the analogue of the Bill
of Rights for programmers and users, whether of programming languages
or latter-generation software?
  

I want that drogues, man
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Removing Pubic Hair Methods

2008-01-30 Thread Gerardo Herzig
Sion Arrowsmith wrote:

Marc 'BlackJack' Rintsch  [EMAIL PROTECTED] wrote:
  

On Tue, 29 Jan 2008 11:48:38 -0800, Tobiah wrote:


class genital:
 def pubic_hair(self):
 pass
 def remove(self):
 del(self.pubic_hair)
  

I think `pubic_hair` is an attribute instead of a method.

Oh, and ``del`` is a statement and not a function.  So the way you wrote
it with parentheses is a bit misleading.



And who's going to want to call genital().remove() anyway?

  

I will use genital().extend(), thats for shure ^^
-- 
http://mail.python.org/mailman/listinfo/python-list


sharing objects between classes

2008-01-28 Thread Gerardo Herzig
Hi all. Im wondering the way to share a database connection between some 
classes:

So far, i came up with a simple class schema, where each class means 
each different relation, i mean i have the follow classes

class Database(object):
  ## make the connection
  self.conn = make_conn()

class Table(object):
  def get_fields:


And at this point i dont know how to use the Database.conn attribute, 
since the get_fields method will perform a query over the given database.
At first, i just define the Table class as a inner class of Database, 
but if i try a   
class Database(object):
  ## make the connection
  def __init__(self):
self.conn = sql_connect()
self.table = Table('foo')

  class Table(object): ## inner class
def get_fields(self, name):


I get a NameError: global name 'Table' is not defined.

So, which would the right pattern to use here? Using a global module? I 
dont know why, but i dont like that idea too much.

Any comments will be appreciated!
Thanks!

Gerardo

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: *** AMERICAN BASTARDS DESERVE TO BE RAPED ***

2008-01-14 Thread Gerardo Herzig
James Matthews wrote:

When did this list become a politics dialog? Please keep on topic Python!

Thanks
James

On Jan 12, 2008 8:07 PM, Joe Riopel [EMAIL PROTECTED] wrote:
  

On Jan 12, 2008 2:00 PM, radiosrfun [EMAIL PROTECTED] wrote:


Whether we agree on tactics or not - if it come to a battlefield with the
two of us - or any Americans there - we're still going to fight the same
enemy - not each other.
  

This is a good resource for starting Python
http://diveintopython.org/

--
http://mail.python.org/mailman/listinfo/python-lis




indian = CreeIndian()
indian.setVoice(lugubrious)
indian.says(When the last tree is cut down, the last fish eaten and the 
last stream poisoned, you will realize that you cannot eat money.)

:)
-- 
http://mail.python.org/mailman/listinfo/python-list


dealing with binary files

2008-01-07 Thread Gerardo Herzig
Hi all. Im trying to read a binary data from an postgres WAL archive.
If i make a
xfile = open('filename', 'rb').xreadlines()
line = xfile.next()

i see this sort of thing: 
']\xd0\x03\x00\x01\x00\x00\x00\r\x00\x00\x00\x00\x00\x00JM//DI+,D\x00\x00\x00\x01$\x00\x00\x00\x7f\x06\x00\x00y\r\t\x00\x02\x0f\t\x00\x00\x00\x10\x00)\x00\x01\x00\x12\x08
 
\x00^\xc2\x0c\x00\x08\x00\x00\x003001([EMAIL PROTECTED]'

This file suppose to have some information about database activity, but 
at this point i cant do more than this, because i cant figure out what 
to do in order to have some 'readable' text.

Im guessing is some C code, im reading the struct module to see if it 
helps, but im not into C programming, and im lost at the start of my 
problem.

Can someone point me out some advice?
Thanks!

Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: dealing with binary files

2008-01-07 Thread Gerardo Herzig
Tom Brown wrote:

On Mon, 2008-01-07 at 11:57 -0200, Guilherme Polo wrote:
  

2008/1/7, Gerardo Herzig [EMAIL PROTECTED]:


Hi all. Im trying to read a binary data from an postgres WAL archive.
If i make a
xfile = open('filename', 'rb').xreadlines()
line = xfile.next()

i see this sort of thing:
']\xd0\x03\x00\x01\x00\x00\x00\r\x00\x00\x00\x00\x00\x00JM//DI+,D\x00\x00\x00\x01$\x00\x00\x00\x7f\x06\x00\x00y\r\t\x00\x02\x0f\t\x00\x00\x00\x10\x00)\x00\x01\x00\x12\x08
\x00^\xc2\x0c\x00\x08\x00\x00\x003001([EMAIL PROTECTED]'

This file suppose to have some information about database activity, but
at this point i cant do more than this, because i cant figure out what
to do in order to have some 'readable' text.

Im guessing is some C code, im reading the struct module to see if it
helps, but im not into C programming, and im lost at the start of my
problem.
  

You are looking at the correct module, struct. But in order to
understand or even correctly extract data from a binary file, you need
to know its structure. There should be some document describing the
Postgre WAL file format.




The log record headers are described in access/xlog.h

http://www.postgresql.org/docs/8.2/interactive/wal-internals.html

  

Yes Tom, my 'C' comes that far, cant do more, i get quickly 
overwelmed...Guess i will have to spend some time reading about it.
Thanks!

Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Extract a number from a complicated string

2007-12-21 Thread Gerardo Herzig
Horacius ReX wrote:

Hi,

I have to read some data from a file, and on each block it always
appears the followng string; xyz.vs.1-81_1 . It appears a lot of time
with different numbers like;

xyz.vs.1-81_1
xyz.vs.1-1234_1
xyz.vs.1-56431_1

and so on

My problem is that I need to extract from this string the number. For
instance in xyz.vs.1-81_1 I have to extract the number 81, and in
xyz.vs.1-1234_1 I need to get the number 1234.

What is the easiest way of doing this ?

Thanks
  

If the strings looks *allways* that way, so its not to complicated:
  number_regex = re.compile('-(\d+)_')
  print number_regex.search('xyz.vs.1-1234_1').group(1)
1234
  print number_regex.search('xyz.vs.1-56431_1').group(1)
56431



-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How to delete this file ???

2007-12-21 Thread Gerardo Herzig
hank/ann wrote:

pop up that says: error loading c:/progra~1\mywebs~1bar\2bin\mwsbar.dll  the 
specified module could not be found

this pop up appeares on desktop each time we log on   cannot get rid off it 
can you help  Ann
  

import os.Linux :P
-- 
http://mail.python.org/mailman/listinfo/python-list


plpythonu and hello concurrent world

2007-12-05 Thread Gerardo Herzig
Hi all. Im having some problems with a small concurrent plpython function.

Based on a small example [1] about concurrent programming, there is some 
code which works fine under python:
#! /usr/bin/python

import threading, random
import time

def myPrint(str):
print 'searching...', str
time.sleep(random.randint(10, 1) / 1000.0)
print str, 'OK!'

myThreads = (threading.Timer(random.random(), myPrint, [hello]), \
threading.Timer(random.random(), myPrint, [concurrent]), \
threading.Timer(random.random(), myPrint, [world]))

for thr in myThreads:
thr.start()

[EMAIL PROTECTED]: python pp.py
searching... concurrent
searching... world
searching... hello
hello OK!
concurrent OK!
world OK!

So far, so good. Almost the same example in plpythonu:
CREATE OR REPLACE FUNCTION search_t()
returns bigint
security definer
as
$$
import threading, random
import time

def myPrint(str):
plpy.notice ('searching...', str)
time.sleep(random.randint(10, 1) / 1000.0)
plpy.notice(str, 'OK!')

myThreads = (threading.Timer(random.random(), myPrint, [hello]), \
threading.Timer(random.random(), myPrint, [concurrent]), \
threading.Timer(random.random(), myPrint, [world]))

for thr in myThreads:
thr.start()

return 1
$$ language plpythonu;

gse_new_version=# select * From search_t();
 search_t
--
1
(1 row)

Looks like myPrint() is not executing at all!!
Have no idea why, so i decided writing both on python and postgres 
forums. Any ideas??

Postgres 8.1.3
python 2.5.1

Thanks!!
Gerardo

[1]
http://forums.hostrocket.com/showthread.php?t=13325
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python is not a good name, should rename to Athon

2007-11-30 Thread Gerardo Herzig
[EMAIL PROTECTED] wrote:

Python is a good programming language,  but Python is not a good
name.

First, python also means snake, Monty Python. If we search python in
google, emule, many results are not programming resource. If we search
PHP, all results are programming resource.

Second, python also means snake, snake is not a good thing in western
culture. Many people dislike any things relevant to snake. We must
have high regard for the custom.

Now, python3000 is coming. It's the best time to rename!

Athon is a good candidate, you could provide better names.

In Athon, the first letter A could pronounce as [ e ] .
  

You will be eaten by the Snake-Ra god tonight!
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: i want to know what is the problem in this code

2007-11-26 Thread Gerardo Herzig
nani wrote:

i am getting the following error for below code

type 'exceptions.KeyError'   Python 2.5.1: C:\Python25\python.exe
Mon Nov 26 10:13:17 2007

A problem occurred in a Python script. Here is the sequence of
function calls leading up to the error, in the order they occurred.
 C:\Program Files\Apache Group\Apache2\cgi-bin\hello.py in ()
7
8 val = cgi.FieldStorage()
9 name = val[name].value
   10 time_from = val[time_from].value
   11 time_to = val[time_to].value
name undefined, val = FieldStorage(None, None, []), ].value = []
 C:\Python25\lib\cgi.py in __getitem__(self=FieldStorage(None, None,
[]), key='name')
  565 if item.name == key: found.append(item)
  566 if not found:
  567 raise KeyError, key
  568 if len(found) == 1:
  569 return found[0]
builtin KeyError = type 'exceptions.KeyError', key = 'name'

type 'exceptions.KeyError': 'name'



#!C:/Python25/python.exe
import cgi
import cgitb; cgitb.enable()

print Content-Type: text/html
print

val = cgi.FieldStorage()
name = val[name].value
time_from = val[time_from].value
time_to = val[time_to].value
html = 
html

body
h1 Hello %s  from %s to %s /h1
/body

/html

print html%(name, time_from, time_to)






html page is...


html


body

form action=C:/Program Files/Apache Group/Apache2/cgi-bin/
hello.py
table
tr
td Enter your name: /td
td input type=text name=name value= / /td
/tr
 tr
td Time from: /td
td input type=text name=time_from value= / /
td
/tr
  tr
td Time to: /td
td input type=text name=time_to value= / /
td
/tr
tr 
td colspan=2 align=center  input type=submit
value=Click Here / /td
/tr
/table

/form

/body

/html

  

Looks like the text field name is empty when submitin the form, and 
cgi.FieldStorage() -no args- does not build the key/pair for empty 
textfields. You can use the keep_blank_values=1 arg in FieldStorage() if 
you want force the key/pair to be generated anyway.

Cheers.
Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: dictionary and list

2007-10-30 Thread Gerardo Herzig
Beema shafreen wrote:

hi everbody,
   I have a file,
 a b   c   d e
  2722316  2722360A_16_P03641972150-44
  2722510  2722554A_16_P2136023916-44
  2722570  2722614A_16_P0364197344-44
  2722658  2722702A_16_P415636692187-44
  2724889  2724948A_16_P03641974738-59
  2725686  2725745A_16_P03641975422-59
  2726167  2726219A_16_P0364197688-52
  2726307  2726366A_16_P415636772167-59
  2728533  2728589A_16_P213602495819-56
  2734408  2734467A_16_P21360257-14-59
  2734453  2734509A_16_P03641977376-56
  2734885  2734929A_16_P213602591987-44

  

This intro looks exactly like the 10 previous post from you. You will 
have to leave some money here, man!
Try posting the result you get, and the result you want for a start. 
Dont make others do what you already did.

Cheers.
Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Which index can i use ?

2007-10-29 Thread Gerardo Herzig
Abandoned wrote:

Hi..
I want to do index in postgresql  python.
My table:
id(int) | id2(int) | w(int) | d(int)

My query:
select id, w where id=x and id2=y (sometimes and d=z)

I have too many insert and select operation on this table.
And which index type can i use ? Btree, Rtree, Gist or Hash ?
Also I want to unique (id, id2)..
Now this is my index. is it give me good performance ?
CREATE UNIQUE INDEX ind1 ON test USING btree (id, id2)
CREATE INDEX ind2 ON test USING btree (id)
CREATE INDEX ind3 ON test USING btree (id2)
CREATE INDEX ind4 ON test USING btree (w)
CREATE INDEX ind5 ON test USING btree (d)

I'm too sorry my bad english.
King regards..

  

Well, this is no python-related at all. But, for a start, if you are not 
using the 'w' field in the WHERE clause, the ind4 index is not necesary 
at all. Having more indexes that you need is a waste of space and 
perfomance. It also depends on the amount of records your table has.
-Hash indexes are discouraged
-GiST indexes are for more advanced uses than equality comparisons
-Rtree are used in multidimentional indexing

So, keep the default btree. Do the test with the diff indexes if you 
want. You may use EXPLAIN for viewing the  index usage.
And dont forget about VACUUM too!

Cheers.
Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Simple HTML template engine?

2007-10-16 Thread Gerardo Herzig
allen.fowler wrote:

Hello,

Can anyone recommend a simple python template engine for generating
HTML that relies only on the Pyhon Core modules?

No need for caching, template compilation, etc.

Speed is not a major issue.

I just need looping and conditionals. Template inheritance would be a
bonus.

I've seen Genshi and Cheetah, but they seem way too complex.

Any ideas?

I'm sure I could build something myself, but I'm sure this has already
been done quite a few times.  Why re-invent the wheel, right?


Thank you,
Allen

  

http://htmltmpl.sourceforge.net/

It has loops and conditionals, simple to use. Very simple.
Kind of old program (dont seems to have suffer modifications since 2001)

Try it.
Cheers.

Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: multimethods decorator

2007-10-11 Thread Gerardo Herzig
Bruno Desthuilliers wrote:

[EMAIL PROTECTED] a écrit :
  

Gerardo Herzig a écrit :
  

Hi all. Im reading the Gido's aproach using decorators at
http://www.artima.com/weblogs/viewpost.jsp?thread=101605

It looks good to me, but the examples shows the functionality using
functions.
Now, when i try to give this decorator into a method, if i try the

class test(object):
   @multimethod(...)
   def met(self, ...):

The multimethod decorator needs the types of the arguments, and, if the
met method requires self as the first argument, the multimethod should
look like
@multimethod(self.__class__, bla, ble) or some like that...

Now i know that im wrong, because i have this error
 @multimethod(self.__class__)
 NameError: name 'self' is not defined


Indeed. Neither self (which will only be known at method call time) nor
even the 'test' class (which is not yet defined when the decorator is
executed) are availables.
  


  

Doh!



If you're surprised, then you'd better learn way more about Python's 
internal (execution model  object model mostly) before continuing with 
multimethods.
  

Is not that, is just...it allways make sense to me AFTER someone tells 
me!! :)

  

So what would be the first argument to @multimethod??


A string ?-)
  


  

Ah? And what will that string contains?



What makes sens for you. Don't forget that Python has very strong 
introspection features. Also note that it's not uncommon to use a 2-pass 
approach : marking some methods with the decorator, then doing the real 
processing in the metaclass (which of course implies a custom metaclass) 
or in the __new__ method (in which case this processing will happen on 
*each* instanciation).
  

Oh well, now you kill me with that one.

  

FWIW, there's already an implementation of multiple dispacth by Mr. Eby...
  

Oh yes, i found the dispatch version of multimethods, but i have not tried
it yet. Do you think is better this version than Guido's?



I think that dispatch is actually used in a few packages, frameworks or 
applications. Is it the case of Guido's stuff ?

Also, IIRC, Guido's snippet is quite less generic than dispatch (which 
is based on expression rules, not only on types).
  

Ok. So im giving dispatch version a chance. Its working nice so far. 
Thanks Man!
Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


multimethods decorator

2007-10-10 Thread Gerardo Herzig
Hi all. Im reading the Gido's aproach using decorators at
http://www.artima.com/weblogs/viewpost.jsp?thread=101605

It looks good to me, but the examples shows the functionality using 
functions.
Now, when i try to give this decorator into a method, if i try the

class test(object):
@multimethod(...)
def met(self, ...):

The multimethod decorator needs the types of the arguments, and, if the 
met method requires self as the first argument, the multimethod should 
look like
@multimethod(self.__class__, bla, ble) or some like that...

Now i know that im wrong, because i have this error
 @multimethod(self.__class__)
 NameError: name 'self' is not defined

So what would be the first argument to @multimethod??

Thanks!!
Gerardo


-- 
http://mail.python.org/mailman/listinfo/python-list


Re: migrating to packages

2007-10-05 Thread Gerardo Herzig
Bruno Desthuilliers wrote:

Gerardo Herzig a écrit :
  

Carl Bank a écrit :


Add these lines in __init__.py:

from MYCLASSES.A import A
from MYCLASSES.B import B
 

  

Ummm, that works indeed, but forces me to import all (more than A and B) 
classes, rigth?



Why so ?

  

If the original MYCLASSES.py has 5 different classes ,say A,B,C,D,E , 
each one has to be imported (as A and B) in order to be used for the 
client code. The thing is, there are more than 5 classes, and looks like 
a lot of unnecesary work to me, since a particular program can use 1,2, 
or 3 classes at the timeThats why im watching the way to override 
the `import statement'...

Damn client code!!!

Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: migrating to packages

2007-10-04 Thread Gerardo Herzig


  

On Oct 3, 2007, at 11:42 AM, Gerardo Herzig wrote:

  

Hi all. I have a single file with several classes, wich i want to
separate into several packages.
The big file is named, say MYCLASES, and contains a class named
A(object), and B(A).

We have been using this MYCLASES in the from MYCLASES import B syntax,
but i cant reproduce this syntax using packages. Im forced to write
from PACKAGE.B import *, and if that means
i have to touch so many files, that would really be a problem to me.
There is (i cant find it yet) a place where i can read about that kind
of package 'migration' situation?

Because i *really* want to keep the FROM PACKAGE import B syntax.


http://www.python.org/doc/current/tut/
node8.html#SECTION00840
  

I have already read those files (and i just read it again), but still
cant find the solution. Maybe i just do not explain myself in the
correct way (or  i am very very stupid :)
I will expose my case quicly.
The MYCLASES.py file contains the A class, so i can use from MYCLASES
import A
a = ()

Using the package mode (wich looks fine BTW), having the simple
MYCLASES/
 __init__.py
 A.py

forces my (i guess) to use the
from MYCLASES.A import A

which is not what i want, because the big amount of files i will have to
modify (and im not alones, there is a group of dudes who use this
MYCLASES)

Im i missing something in that docs you post? Thanks!!



Add these lines in __init__.py:

from MYCLASSES.A import A
from MYCLASSES.B import B
  

Ummm, that works indeed, but forces me to import all (more than A and B) 
classes, rigth?
Gerardo.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: List of objects X Database

2007-10-04 Thread Gerardo Herzig
MindMaster32 wrote:

I am writing a script that has to read data from an ASCII file of
about 50 Mb and do a lot of searches and calculations with that data.
That would be a classic problem solved by the use of a database
(SQLite would suit just fine), but that would require the user to
install more packages other than python itself, and that I am trying
to avoid.
Since the data is not too large, I wonder if there is another way to
store all data in memory and work with it more or less like a
database, doing searches and working with datafields.

This is not clear to me how can be implemented. I thought of creating
a class with the data structure, and creating a list of objects of
that class, each one containing one line of data from the database.

Any thoughts or suggestions?

Thanks!
Eduardo

  

What about shelve? It Requires some db support, yesAnd what about 
just reading the file and making a dict? It is a `csv' like file, so you 
can just read it and generate a dict?

Cheers.
Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


migrating to packages

2007-10-03 Thread Gerardo Herzig
Hi all. I have a single file with several classes, wich i want to 
separate into several packages.
The big file is named, say MYCLASES, and contains a class named 
A(object), and B(A).

We have been using this MYCLASES in the
from MYCLASES import B syntax, but i cant reproduce this syntax using 
packages. Im forced to write from PACKAGE.B import *, and if that means 
i have to touch so many files, that would really be a problem to me. 
There is (i cant find it yet) a place where i can read about that kind 
of package 'migration' situation?

Because i *really* want to keep the FROM PACKAGE import B syntax.

Thanks!
Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: database persistence with mysql, sqlite

2007-09-24 Thread Gerardo Herzig
coldpizza wrote:

Hi,

I want to run a database query and then display the first 10 records
on a web page. Then I want to be able to click the 'Next' link on the
page to show the next 10 records, and so on.

My question is how to implement paging, i.e. the 'Next/Prev' NN
records without reestablishing a database connection every time I
click Next/Prev? Is it at all possible with cgi/mod_python?

For example, in a NON-web environment, with sqlite3 and most other
modules, I can establish a database connection once, get a cursor
object on which I run a single 'SELECT * FROM TABLE' statement and
then use cursor.fetchmany(NN) as many times as there are still results
left from the initial query.

How do I do the same for the web? I am not using any high-level
framework. I am looking for a solution at the level of cgi or
mod_python (Python Server Pages under Apache). To call
cursor.fetchmany(NN) over and over I need to pass a handle to the
database connection but how do I keep a reference to the cursor object
across pages? I use mysql and sqlite3 as databases, and I am looking
for an approach that would work with both database types (one at a
time). So far I have successfully used the following modules for
database access: sqlite3, mysqld, and pyodbc.
  

Apache/cgi just dont work this way. When apache receives a new request 
(a cgi being called), it starts a new thread, it execute him, and gives 
the client some result. AND THEN KILL THE THREAD. Altough i never used 
it, what i think you need is fast cgi (fcgi), wich takes care of 
persistent connections to a web server.

Cheers.
Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python Regex Question

2007-09-20 Thread Gerardo Herzig
[EMAIL PROTECTED] wrote:

I need to extract the number on each td tags from a html file.

i.e 49.950 from the following:

td align=right width=80font size=2 face=New Times
Roman,Times,Serifnbsp;49.950nbsp;/font/td

The actual number between: nbsp;49.950nbsp; can be any number of
digits before decimal and after decimal.

td align=right width=80font size=2 face=New Times
Roman,Times,Serifnbsp;##.nbsp;/font/td

How can I just extract the real/integer number using regex?

  

If all the td's content has the nbsp;[value_to_extract]nbsp; pattern, 
things goes simplest

[untested]

/td.*nbsp;([^]*)nbsp;/

the parentesis will be used to group() the result (and extract what you 
really want)

Cheers
Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


executing list of methods (and collecting results)

2007-09-20 Thread Gerardo Herzig
Hi all. Im in this situation: I want to perform several kind of 
(validating) methods to a given value.
Lets say i have a class named Number, and the following methods:
is_really_a_number(),
is_even(),
is_greater_than_zero(),
and so on. All of them returning booleans.

I want the collect_validators() method is to execute any of the above 
methods, and collect their names as items of a list (wich will be the 
collect_validators() return value).

My first approach is:

[code]
def collect_validators(self):
v_dict = { 'is_really_a_number': is_really_a_number,
  'is_even': is_even,
  'is_greater_than_zero', is_greater_than_zero
   }

   for name, meth in v_dict.items():
  result = meth()
  if result: yield name
[/code]

I wondering if is this a good pattern to apply, i like the way it looks 
like, at least to me it looks `natural', but...im calling every method 
twice here? One in v_dict and again on the dict iteration?

Any suggestion will be great!

Thanks!
Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


parsing long `To' and 'Cc' from email

2007-09-06 Thread Gerardo Herzig
Hi all. Im trying to develop yet another email filter. Just for fun for 
now. Im having a little trouble parsing long 'To' and 'Cc' headers. 
Sometimes p.e. the 'To' header comes like

'[EMAIL PROTECTED], [EMAIL PROTECTED]'
others comes like
'My self [EMAIL PROTECTED], My brother [EMAIL PROTECTED]',
other times a \r\t comes inside the `To' header. And any combination of 
the above mentioned (and shurely more) can ocur.

the email.* package dont seems to parse that kind of headers 
`correctly'. What i want is to get a list with all the email address in 
the `To' header.

Someone know if there is a more sofisticated parser for doing this?

Thanks!
Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: parsing long `To' and 'Cc' from email

2007-09-06 Thread Gerardo Herzig
Steve Holden wrote:

Gerardo Herzig wrote:
  

Hi all. Im trying to develop yet another email filter. Just for fun for 
now. Im having a little trouble parsing long 'To' and 'Cc' headers. 
Sometimes p.e. the 'To' header comes like

'[EMAIL PROTECTED], [EMAIL PROTECTED]'
others comes like
'My self [EMAIL PROTECTED], My brother [EMAIL PROTECTED]',
other times a \r\t comes inside the `To' header. And any combination of 
the above mentioned (and shurely more) can ocur.

the email.* package dont seems to parse that kind of headers 
`correctly'. What i want is to get a list with all the email address in 
the `To' header.

Someone know if there is a more sofisticated parser for doing this?



Have you tried using email.utils.getaddresses()?

regards
  Steve
  

No, i was not. And it works just perfect! One day i will make a hard 
question!! I wonder why this getaddresess() function is not a method 
into the HeaderParser class.

Ok, so my content-filter can continue now. Thanks Steve!
Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Help me understand this script

2007-09-05 Thread Gerardo Herzig
Ryan J Nauman wrote:

Can someone help me understand this script please?
I understand everything except for the anagram function.  Could you break 
it down into more than 1 line of code for me or explain it? (I understand 
WHAT it does but HOW?) Thanks.

Script 

###
# SCRABBLE.PY
#
# purpose: 
#   find usable bingos based on your rack
#
# usage:
#   python scrabble.py eilsnsy
#
# output:
# Straight anagrams: 
#  linseys
#  lysines
# Possible other words: 
# + B
#   sensibly
#+ K
#   skylines
#+ V
#   sylvines
###
# Scrabble is a registered trademark of J. W. Spear  Son PLC and 
# Hasbro Inc. Any and all uses of the word Scrabble in this code
# refers to this trademark.
#
# This code is not affiliated with any company.
###

import sys

WORDS = [ i.rstrip ().lower() for i in file ('c:\python25\TWL06.txt') ]
# you can download the current TWL and/or SOWPODS dictionaries from 
# http://67.19.18.90/twl.zip and http://67.19.18.90/sowpods.zip . 
# Update the file name above as appropriate if you want to use a proper
# Scrabble dictionary.



def alphabetise(word):
x = [i for i in word]
x.sort()
 
return .join(x)

def anagram(word):
wordLength = len(word)
sortedWord = alphabetise(word.lower())
return [i for i in WORDS if len(i) == wordLength and alphabetise(i) == 
sortedWord]

for word in sys.argv[1:]:
print Straight anagrams: 
for i in anagram(word):
print+ i
print Possible other words: 
for i in ABCDEFGHIJKLMNOPQRSTUVWXYZ:
a = anagram(i + word)
if a:
print +, i
for h in a:
print   , h

 End script
  

I guess the difficult part remains in the last line. (Untested code bellow)
[code]

def anagram(word):
resultValue = []
wordLength = len(word)
sortedWord = alphabetise(word.lower()) #not much to change until here
for WORD in WORDS:
if wordLength == len(WORD) and alphabetise(WORD) == sortedWord:
resultValue.append(WORD)

return resultValue

[/code]

Cheers.
Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: How does super() work?

2007-09-03 Thread Gerardo Herzig
Lamonte Harris wrote:

I've searched Google, and other search engines to try to find out how
super() works.  Can someone explain in short detail how super() works?  I
may and may not need to know this information, but it is good to know.

  

There is at least one explanation in the python.org site, among other 
topics related to super() usage:
http://www.python.org/download/releases/2.2.3/descrintro/#cooperation

Cheers,
Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: pure python for sms

2007-08-31 Thread Gerardo Herzig
Neil Hodgson wrote:

Gerardo Herzig:

  

Hi dudes. Im looking for a python implementation for sending sms to a 
cell phone. I was try using some free pages, but i want to use a python. 
Do i need a cellphone conected to my machine? Or can i send sms to some 
cell via some python library?



This is likely to cost some money similar to sending an SMS from a 
'phone. There are several companies that provide SMS sending services 
that can be accessed through HTTP. Have a look at www.clickatell.com and 
www.aql.com . Here is a library based on Clickatell:
http://www.powertrip.co.za/code/python/clickatell.py

Neil
  

Well, im not triyng to send a SMS `FROM' a cellphone, im trying to send 
a SMS `TO' a cellphone. Here (in Argentina) are several sites who lets 
you send a sms for free. You also can receive SMS responses via this page
http://sms.personal.com.ar/Mensajes/msn.htm

While my tries using this page via urllib failed, i dont want to depend 
on an external page anyway. The  python class you  send to me looks like 
a  pay site (if not, i dont see why the tokenpay() and getbalance() 
methods :)

I was also avaiable to send a sms in the form of an plain email 
[EMAIL PROTECTED], but it not seems to work 
this way no longer. Again, i dont want to do it that way anyway.

Thats why im looking for a python implementation of that funcionality.

Thanks!
Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


pure python for sms

2007-08-30 Thread Gerardo Herzig
Hi dudes. Im looking for a python implementation for sending sms to a 
cell phone. I was try using some free pages, but i want to use a python. 
Do i need a cellphone conected to my machine? Or can i send sms to some 
cell via some python library?

Waiting for advice.
Thanks!

Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Setting a read-only attribute

2007-08-30 Thread Gerardo Herzig
[EMAIL PROTECTED] wrote:

I have an object and wish to set an attribute on it which,
unfortunately for me, is read-only.

How can I go about this?

Cheers.
-T

  

I guess we all need an code example to show us the way 'read only' is 
implemented.
If you cant access to the class wich you are instantiated from, well, 
maybe you can just post the error or exception you get.

Cheers.
Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


extending of adding method?

2007-08-28 Thread Gerardo Herzig
Hi all. I have a question about design. The general question would be: 
Where is the line beteween extending a class and adding new methods to 
that class?

And the particular case im involved is:

I have a class (say USERCLASS) who implements a user interface. One of 
his methods is called `login'. Later on i got the order of implementing 
a `single login', which off course means a single user cant login if a 
session is already started for that user. Extending comes to my mind at 
first (it works good, actually). But now im thinikng if there some 
problem in adding a method to the USERCLASS class named single_login(), 
who will take care of applying the rules of single sign on.

Which one you guys will pick up? USERCLASS().single_login() or 
SINGLELOGINUSERCLASS().login()


Thanks for your oppinions!
Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Is it reasonably easy easy to something like this with python?

2007-08-28 Thread Gerardo Herzig
walterbyrd wrote:

This is made with a php5 framework called qcodo.

http://examples.qcodo.com/examples/dynamic/inline_editing.php

With qcodo it's easy to make grids that are sortable and inline
editable. Qcodo grids work from the database - not an xml table or
array. Qcodo handles complex data relations, and fairly large
datadabes.

I like python better than php, but I don't know of any python tools to
create these sorts of grids.

  

The one who make that table sorteable is AJAX. Not php. The php part is 
kind of trivial (so it would be `trivial' in python too). It just reads 
some data and format it in an html table.

Cheers.
Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Is it reasonably easy easy to something like this with python?

2007-08-28 Thread Gerardo Herzig
walterbyrd wrote:

On Aug 28, 1:31 pm, Gerardo Herzig [EMAIL PROTECTED] wrote:
  

walterbyrd wrote:



  

The one who make that table sorteable is AJAX. Not php. The php part is
kind of trivial (so it would be `trivial' in python too). It just reads
some data and format it in an html table.




Thank you, that is great to know. What if there were 1000 records, and
the table was paginated? I suppose, ajax would sort the front end, and
backend language, and database, would soft behind the scene, or
something?

  

Im not an AJAX expert (not even close actually. In fact i just used it 
once), but seems like you will have to reload all the page (all the 
table at least). Because now is a different scenario. If the table is 
paginated, it looks like you will send, say 50 results at one time, then 
(when  pressing 'next 50'), anhoter 50, and so on. So AJAX only will 
have THOSE 50 for ordering. Another approach would be returning de 
entire recordset, and implement all the 'next' and 'previous' links via 
AJAX. And i dont think you will like to send the entire result. I dont.

What will i do (at least from WIK for now), is having a set of `hrefs' 
(maybe with some nice arrows) in all of the table headers, to indicate 
the desired order you want to get. And, if you have a column table named 
'age', you will make those href like
'a 
href=showmethetable.py?columnorder=ageordertype=ascnice_arrow_graphic'

then your cgi python script will take that mess after the ? sign, parse 
it (via cgi module perhaps), and make a new query, with the 'order by 
age asc' clause, wich are the 'arguments' in the url.

There is allways a lot of ways to do some stuff. I will check into de 
AJAX list too!

Cheers.
Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: advice about `correct' use of decorator

2007-08-23 Thread Gerardo Herzig
BJörn Lindqvist wrote:

On 8/22/07, Gabriel Genellina [EMAIL PROTECTED] wrote:
  

On 22 ago, 10:00, BJörn Lindqvist [EMAIL PROTECTED] wrote:


As I said, you can accomplish the exact same thing by calling a
function from within the function that requires the user to be logged
in.

def change_pass():
check_user_logged_in()
... more stuff here...

is less complex (and therefore preferable) than:

@check_user_logged_in
def change_pass():
... more stuff here...

An important principle in engineering is that you should always strive
to make your design as simple as possible. If you have two equal
designs, you should always choose the one that is simpler because
simple things are easier to understand than complex things.
  

I don't see the complexity in this case - both are a single line of
code. Any internal complexity is hidden by the language. In fact, I



Hiding doesn't reduce complexity, quite the opposite.

  

consider the decorated function simpler than the other: its body
represents exactly what the function does, without any distracting
precondition calls.



Think about how the decorator is implemented. It is a high order
function, taking a function and returning a new function. Something
like this:

def check_user_logged_in(func):
def f(*args, **kwargs):
if global_state.the_user.is_logged_in:
return func(*args, **kwargs)
return show_login_page()
return f

@check_user_logged_in
def change_pass():
... more stuff here...

or:

def check_user_logged_in():
return global_state.the_user.is_logged_in

def change_pass():
if not check_user_logged_in():
return show_login_page()
... more stuff here ...

or even:

def change_pass():
if not global_state.the_user.is_logged_in:
return show_login_page()
... more stuff here ...

  

The decorator has some advantages: can have syntax support on your
editor, can perform some registering/logging, it's even easier to
quickly check visually if it's here.



The decorator has just as many disadvantages. For example, what if you
want to redirect back to the change_pass page once the user has
pressed the Login button on the login_page? Or if you want to show
different login pages depending on user properties? How much control
flow do you really want to hide in your decorator?

  

Thanks Björn. Maybe im blind here in my intent to use decorators 
somewhere, but even re-checking you samples (pretty much the kind of 
example i show to my boss), it looks nicer (to me) when using a 
decorator!! I guess im becoming a  `deco junky' :)

Later you expose some interesing points about that login page and 
redirecting stuff...well, im my case, the login page does depends on 
user properties, wich (at this point) are stored in a `session data 
variable' (actually a table row), so the login pages take care about 
user properties, not the decorator itself, but the other part of the page.

I guess decorators has is own public, well, im one of that public. Let 
my be with my deco-junk alone, you bastard :)

Thanks a lot for your opinnions, guys!
Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: advice about `correct' use of decorator

2007-08-17 Thread Gerardo Herzig
Laszlo Nagy wrote:



 Are you developing a website or a GUI program?


 It will be used in a web development. It is an important point?

 Yes, I think. Unless you use AJAX. :-) Most web sites work this way:

 user clicks - request to server - process on server - response

 I would rather enclose the whole handler in try/except and raise a 
 custom PermissionDenied exception when the user has inscuficient 
 permissions. There are problems with a decorator used for 
 authorization. The context needs to be determined. E.g. which user is 
 accessing the method? (It can be hard to tell if the method is part of 
 a thread object that lies in a thread pool and is shared between 
 simultaneous clients...) Also it might be that the method's purpose is 
 to change objects of the same class, and the user has permission to 
 modify one object but not the other. In this case, authorization must 
 be done inside the function call... How do you express this with a 
 decorator?

 These are just ideas. You should analyze your problem and make your 
 decision. If you only want to restrict access to functions, then 
 probably using decorators is perfect.

 Best,

   Laszlo


I post the change_pass() function as an example, there is a buch of 
other functions (the whole site actually) that will require a logged 
user.  May the change_pass() function have additional control, shure, 
but it will be not part of the `global' requirement.

Thank you very much for your time, Laszlo
Gerardo

-- 
http://mail.python.org/mailman/listinfo/python-list


Re: advice about `correct' use of decorator

2007-08-17 Thread Gerardo Herzig
BJörn Lindqvist wrote:

On 8/16/07, Gerardo Herzig [EMAIL PROTECTED] wrote:
  

@is_logued_in
def change_pass():
bla
bla

And so on for all the other functions who needs that the user is still
loged in.

where obviosly the is_logued_in() function will determine if the dude is
still loged in, and THEN execute change_pass(). If the dude is not loged
in, change_pass() is NOT executed at all. Instead, it will be redirected
to the `login' screen.



I think this is redundant use of a decorator. You can achieve the
exact same effect by writing:

def is_logued_in():
if not user.is_logged_in():
raise NotLoggedInError

It costs you one more line, but reduces complexity. And if you are
worried about that extra line you can put it in a function.

  

As far as i know (by the way, AFAK is the shortcut?, and BTW means `by 
the way'? ), decorators are not indispensable. I mean, all that you can 
do with python, you can doit without decorators. And from my point of 
view, this hides the complexity for the other developers of my group, 
since all they have to do is add the @is_logged_in line at the top of 
the cgi script, and not to worrie about exceptions, not even how the 
decorator is implemented (i may log the error in some file). All they 
have to know is that any abnormal situation will redirect to the `login' 
screen.

Thank you for your comments!
Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Help me!!

2007-08-16 Thread Gerardo Herzig
Anhoter HURRA for list comprehensions:
  a = ['a', 'b', 'c', 'd']
  b = ['a','c']
  [x in b and x.upper() or x for x in a]
['A', 'b', 'C', 'd']

Is what you want?
Cheers

Gerardo

I'm trying to compare the list with another list and if it is there in
both I'm changing it to upper case and adding to another list and if
its not there in both I just want to add it to the global list (ie
files).
I'm able to do the first part but when I'm doing the second part the
files which are not there in both are getting repeatedly into the
global file. Some one help me so that
If ab = [a,b,c,d]
and cd = [a,c]
my global list file should be [A,b,C,d]

  


-- 
http://mail.python.org/mailman/listinfo/python-list


advice about `correct' use of decorator

2007-08-16 Thread Gerardo Herzig
Hi all. I guess i have a conceptual question:
Im planing using a quite simple decorator to be used as a conditional 
for the execution of the function. I mean something like that:

@is_logued_in
def change_pass():
bla
bla

And so on for all the other functions who needs that the user is still 
loged in.

where obviosly the is_logued_in() function will determine if the dude is 
still loged in, and THEN execute change_pass(). If the dude is not loged 
in, change_pass() is NOT executed at all. Instead, it will be redirected 
to the `login' screen.

Something in my mind tells me that this is not the pythonic way...But i 
like the idea, so please tell me that im in the right way :)

Cheers.
Gerardo


-- 
http://mail.python.org/mailman/listinfo/python-list


Re: advice about `correct' use of decorator

2007-08-16 Thread Gerardo Herzig
Gerardo Herzig wrote:

 Hi all. I guess i have a conceptual question:
 Im planing using a quite simple decorator to be used as a conditional 
 for the execution of the function. I mean something like that:

 @is_logued_in
 def change_pass():
 bla
 bla

 And so on for all the other functions who needs that the user is 
 still loged in.

 where obviosly the is_logued_in() function will determine if the dude 
 is still loged in, and THEN execute change_pass(). If the dude is not 
 loged in, change_pass() is NOT executed at all. Instead, it will be 
 redirected to the `login' screen.
   

 Are you developing a website or a GUI program?

   Laszlo


It will be used in a web development. It is an important point?
Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: advice about `correct' use of decorator

2007-08-16 Thread Gerardo Herzig
Steven Bethard wrote:

Gerardo Herzig wrote:
  

Hi all. I guess i have a conceptual question:
Im planing using a quite simple decorator to be used as a conditional 
for the execution of the function. I mean something like that:

@is_logued_in
def change_pass():
   bla
   bla

And so on for all the other functions who needs that the user is still 
loged in.

where obviosly the is_logued_in() function will determine if the dude is 
still loged in, and THEN execute change_pass(). If the dude is not loged 
in, change_pass() is NOT executed at all. Instead, it will be redirected 
to the `login' screen.

Something in my mind tells me that this is not the pythonic way...But i 
like the idea, so please tell me that im in the right way :)



Django does it almost exactly this way:

http://www.djangoproject.com/documentation/authentication/#the-login-required-decorator

STeVe
  

Great! So from now on, my idea is labeled as `djangothic' :)
Thanks a lot!

Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Question about properties.

2007-08-10 Thread Gerardo Herzig
king kikapu wrote:

On Aug 10, 1:33 pm, Marc 'BlackJack' Rintsch [EMAIL PROTECTED] wrote:
  

On Fri, 10 Aug 2007 03:21:29 -0700, king kikapu wrote:


Hi,
  

i read in a book the following code snippet that is dealing with
properties:
  

class ProtectAndHideX(object):
def __init__(self, x):
assert isinstance(x, int), 'x must be an integer!'
self.__x = ~x
  

def get_x(self):
return ~self.__x
  

x = property(get_x)
  

Can anyone please help me understand what the symbol ~ does here ??
  

This has nothing to do with properties.  For integer objects ``~`` is the
bitwise negation or invertion operator.

Ciao,
Marc 'BlackJack' Rintsch



Xmmm...ok then but what is actually doing there ?? I removed it and
things seems to work the same way...

  

I guess it is the `Hide' part of the Protectand*Hide* class.
Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


(May be OT) developing in jython, using in java?

2007-07-31 Thread Gerardo Herzig
Hi all. I dont know if this is the right place for asking this, but 
maybe some of you know where i must go.
The thing is:

Im writing a very simple class (in python) to access some LDAP server. A 
companion will access to the same LDAP server too, but his developing in 
java. So i said ok, wait, i dont think we have to make the exact same 
thing twice! Let me see if jython can help usI can find (after a 
quick review) an answer to this: Can i, using jython, make a package so 
my companion can import that package as a webservice??

As im farly new in python, *very* new at Java, and *even newer* at 
jython, my brain just said to me ok, i dont know, i want a beer, so 
maybe some of you can gide me to where i must go in order to clarify my 
ideas.

Thanks!!!

Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: SQLObject 0.9.1

2007-07-26 Thread Gerardo Herzig
Oleg Broytmann wrote:

Hello!

I'm pleased to announce the 0.9.1 release of SQLObject.


What is SQLObject
=

SQLObject is an object-relational mapper.  Your database tables are described
as classes, and rows are instances of those classes.  SQLObject is meant to be
easy to use and quick to get started with.

SQLObject supports a number of backends: MySQL, PostgreSQL, SQLite, and
Firebird.  It also has newly added support for Sybase, MSSQL and MaxDB (also
known as SAPDB).


  

So..at 11:23 we got version 0.7.8...at 11:30 was version 0.8.5...now 
there is  a 0.9.1 version?? Have a coffe dude, stop  programming a little :)
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Delete a file from a CGI

2007-06-01 Thread Gerardo Herzig
When you execute a cgi, the program runs under the apache user 
(ussualy www or wwwrun or so), so THAT user needs permissions for 
deleting the file. Other approach could be suid'ing the cgi program.

Gerardo

HI!

I want to delete a file from a CGI, but I always get a Permission denied
error.

I've tryed this after creating the file (from a normal script):

os.chmod(.lock,stat.S_IMODE(stat.S_IRWXU | stat.S_IRWXO | stat.S_IRWXG))
os.chown(.lock,pwd.getpwnam(nobody)[2],pwd.getpwnam(nobody)[3])

but the CGI still can't delete the file.

I will appreciate very much your help.

Thanks a lot.


  


-- 
http://mail.python.org/mailman/listinfo/python-list


using google search api for python

2007-05-22 Thread Gerardo Herzig
Hi all. Im looking for the pyGoogle for making google searchs y a python 
script. The thing is, all im founding is an AJAX api, but the 
application ill use is NOT a web app. So, someone know if there is a 
pure python api that i can download and use?

Thanks!
Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


I25 barcode generator?

2007-04-26 Thread Gerardo Herzig
Hi. Im looking for an I25 barcode generator. I found a couple of nice 
EAN barcode generators, but this application needs an I25 barcode. Since 
this will be an web application, i need to do it in the server side. In 
python, off course :)

Anybody knows one?

Thanks!
Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


getting user id (from an arbitrary sys user)

2007-03-14 Thread Gerardo Herzig
hi all. What i need to know is if there is some function like 
os.getuid(), but taking an argument (the username, off course), so i can 
do getuid('myuser')

Thanks you dudes!

Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


list comprehension (searching for onliners)

2006-10-20 Thread Gerardo Herzig
Hi all: I have this list thing as a result of a db.query: (short version)
result = [{'service_id' : 1, 'value': 10},
{'service_id': 2, 'value': 5},
{'service_id': 1, 'value': 15},
{'service_id': 2, 'value': 15},
 ]

and so on...what i need to do is some list comprehension that returns me 
something like

result = [
{
'service_id' : 1, 'values': [ {'value': 10}, 
{'value': 15}]
 },
{
  'service_id' : 2, 'values': [ {'value': 5}, {'value': 15}]
}
   

My problem now is i cant avoid have repeteated entries, lets say, in 
this particular case, 2 entries for service_id = 1, and other 2 for 
service_id =2.
Ill keeping blew off my hair and drinking more cofee while searching for 
this damn onliner im looking for.

Thanks dudes.
Gerardo
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: list comprehension (searching for onliners)

2006-10-20 Thread Gerardo Herzig
You are the man, you are the man!! Yes, i need those dicts in order to 
assign them to a nested TMPL_LOOP for the htmltmpl templating engine. 
Thats why i cant use the solution provided by Max, and thanks to Jon too!!
Thanks a lot dudes, i hope someday ill turn myself into some of you guys 
who can actually answer questions ;)

Gerardo

 result = [{'service_id' : 1, 'value': 10},
 {'service_id': 2, 'value': 5},
 {'service_id': 1, 'value': 15},
 {'service_id': 2, 'value': 15},
  ]

 and so on...what i need to do is some list comprehension that returns 
 me something like

 result = [
 {
 'service_id' : 1, 'values': [ {'value': 10}, 
 {'value': 15}]
  },
 {
   'service_id' : 2, 'values': [ {'value': 5}, {'value': 15}]
 }
   
 My problem now is i cant avoid have repeteated entries, lets say, 
 in this particular case, 2 entries for service_id = 1, and other 2 
 for service_id =2.


 Okay...while I'm not sure the opacity of a one-liner is actually 
 productive, it *can* be done.  Whether it should, I leave that to your 
 discernment. :)

  [{'service_id': i, 'values':[{'value':d2['value']} for d2 in 
 result if d2['service_id'] == i ]} for i in set(d['service_id'] for d 
 in result)]

 [{'service_id': 1, 'values': [{'value': 10}, {'value': 15}]}, 
 {'service_id': 2, 'values': [{'value': 5}, {'value': 15}]}]


 There's no claiming it's efficient, as it looks like there may be some 
 O(N^2) logic going on under the hood (or possibly O(N*M) where N is 
 the size of the result-set and M is the count of unique service_id 
 values), as it's iterating over the result-set in two 
 dimensions...once to create the set of top-level indices, and once for 
 each result.

 If you didn't have to have all those dictionaries around, it might 
 come out more cleanly to just have some result-set that came out to be

 {1: [10,15], 2: [5,15]}

 Just a few thoughts...

 -tkc





-- 
http://mail.python.org/mailman/listinfo/python-list


plpython and pickle

2006-08-17 Thread Gerardo Herzig
Hi all, sory if this is kind of [OT], but cannot find the answer for
this behaviour

Im programming a db function using plpython...i have a db called
'sessions', and a postgres 8.1.2 database called 'test'. In 'sessions',
i store several values in a `pickled' way so
If a do

You are now connected to database sessions.
sessions=# select * from 
getsessiondata('QQtEpLoKHnvbKGSpgJgYMPyCdHgXSi');


 getsessiondata 




 
(dp0--ENTER--S---alucod-ENTER--p1--ENTER--S---32009436-ENTER--p2--ENTER--sS---respuestas_1-ENTER--p3--ENTER--S---3-ENTER--p4--ENTER--sS---respuestas_2-ENTER--p5--ENTER--S---2-ENTER--p6--ENTER--sS---respuestas_3-ENTER--p7--ENTER--S---4-ENTER--p8--ENTER--sS---submit-ENTER--p9--ENTER--S---Responder-ENTER--p10--ENTER--s.
(1 row)

Perfect. Thats what i spect to see.


Now, if i do (in 'test' database)

data = plpy.execute(SELECT * from dblink('dbname=sessions', 'select * from 
getsessiondata(\'\'%s\'\')') as t1(session_data name);  % 
session_id)[0][session_data];
plpy.notice(data)

i got this
NOTICE:  ('(dp0--ENTER--S---alucod-ENTER--p1--ENTER--S---32009436-',)

The pickled string as been truncated at some point, and when i try to unpickle 
it, i got error.

Now, the question: 
What da hell can i do?

-Postgresql 8.1.2
-Python 2.4.2

Im not even sure if this is a pickle, plpython nor postgresql issue, so
im sory if this is [OT] here.

Thanks!!
Gerardo

-- 
http://mail.python.org/mailman/listinfo/python-list


operator creation?

2006-03-10 Thread Gerardo Herzig
Hi all. Ill try to explain mi situation:
Lets say i have an DB object, who implements the querys to the database
trough a method called DBObject.doQuery.

On the other hand, i have 50 sql functions stored in the database. So i
can call DBObject.doQuery('select * from my_sql_function()')...Ok, what
do i want to achieve, is some mecanism to be able to call

DBObject.my_sql_function(), but without actually having to declare the
method called my_sql_function. May be with creating a `-' operator...
maybe overrwriting the '.' operator...


Im not shure. If someone understand my problem (and my poor english),
please help :)

Gerardo

-- 
http://mail.python.org/mailman/listinfo/python-list