Re: crash while using PyCharm / Python3

2016-03-22 Thread Jonathan N. Little

Adam wrote:

Thanks, but why fix if it ain't broke?:-)


No reason to.

--
Take care,

Jonathan
---
LITTLE WORKS STUDIO
http://www.LittleWorksStudio.com
--
https://mail.python.org/mailman/listinfo/python-list


Re: crash while using PyCharm / Python3

2016-03-21 Thread Jonathan N. Little

Adam wrote:

Sure glad I did not reinstall Ubuntu.  Whew!!


Unless you really-really-really screw things up, you usually do not have 
to. Linux is not Windows ;-) Even if you had to, with /home on its own 
partition a reinstall would not have been an issue, you just have to 
choose the "Something Else" on partitioning and only format the "/" and 
set the "/home" partition mount point and NOT FORMAT it.


A tip: If you use gparted or e2label and give partitions labels. Makes 
moving partitions and data easier...


sda1 "12.04-root"
sda5 "old-home"

sdb1 "14.04-root"
sdb5 "new-home"

So from a live session when I mount both drives it is easy to keep 
things straight when I copy my profiles from old drive on sda to new 
drive with newer version of Ubuntu on sdb...


--
Take care,

Jonathan
---
LITTLE WORKS STUDIO
http://www.LittleWorksStudio.com
--
https://mail.python.org/mailman/listinfo/python-list


Re: crash while using PyCharm / Python3

2016-03-21 Thread Jonathan N. Little

Adam wrote:

"Adam"  wrote in message
news:ncprqb$tl9$1...@news.albasani.net...


"Jonathan N. Little"  wrote in message
news:ncpjj0$7ug$1...@dont-email.me...

Adam wrote:

There ought to be a way to just reinstall the graphics subsystem rather
than
an all-or-none installation approach.


Yes you can. Did it for a borked install of the nVidia driver. reference
this:

<https://wiki.ubuntu.com/X/Troubleshooting/VideoDriverDetection#Problem:_Need_to_purge_-fglrx>


Thanks, even after doing the following...

Problem: Need to purge -fglrx

Typically, the following manual commands will properly uninstall -fglrx:

  $ sudo apt-get remove --purge xorg-driver-fglrx fglrx*
  $ sudo apt-get install --reinstall libgl1-mesa-glx libgl1-mesa-dri
xserver-xorg-core
  $ sudo dpkg-reconfigure xserver-xorg

I still get that dreaded "The system is running in low-graphics mode"
error.
And, recovery mode failsafeX and Ctrl+Alt+F1 hangs with the following...


Initializing built-in extension MIT-SCREEN-SAVER
Initializing built-in extension DOUBLE-BUFFER
Initializing built-in extension RECORD
Initializing built-in extension DPMS
Initializing built-in extension Present
Initializing built-in extension DRI3
Initializing built-in extension X-Resource
Initializing built-in extension XVideo
Initializing built-in extension XVideo-MotionCompensation
Initializing built-in extension SELinux
Initializing built-in extension XFree86-VidModeExtension
Initializing built-in extension XFree86-DGA
Initializing built-in extension XFree86-DRI
Initializing built-in extension DRI2
Loading extension GLX




After trying the following...

http://askubuntu.com/questions/577093/how-to-install-gnome-desktop

$ sudo apt-get update
$ sudo apt-get install gnome-shell


http://tipsonubuntu.com/2014/06/06/change-display-manager-ubuntu-14-04/

$ sudo dpkg-reconfigure lightdm


Not sure about ATI, but when you purge the nVidia driver it takes Unity 
with it so I had to reinstall unity-desktop afterwards. If you want 
lightdm but are now using gdm, maybe it happened because unity-desktop 
was uninstalled and you just installed gnome-shell, your can reset:


sudo dpkg-reconfigure gdm

and select lightdm from the list.


--
Take care,

Jonathan
---
LITTLE WORKS STUDIO
http://www.LittleWorksStudio.com
--
https://mail.python.org/mailman/listinfo/python-list


Re: crash while using PyCharm / Python3

2016-03-21 Thread Jonathan N. Little

Adam wrote:

There ought to be a way to just reinstall the graphics subsystem rather than
an all-or-none installation approach.


Yes you can. Did it for a borked install of the nVidia driver. reference 
this:


<https://wiki.ubuntu.com/X/Troubleshooting/VideoDriverDetection#Problem:_Need_to_purge_-fglrx>

--
Take care,

Jonathan
---
LITTLE WORKS STUDIO
http://www.LittleWorksStudio.com
--
https://mail.python.org/mailman/listinfo/python-list


Re: Hooking any/all 'calls'

2006-12-28 Thread Kevin Little
Thanks, Robert! That was exactly what I was looking for.
 -k

"fumanchu" <[EMAIL PROTECTED]> wrote:
>Kevin Little wrote:
>> In Python 2.4 or 2.5, what is the easiest way to hook any and all
>> callables such that designated code is executed at the very start and
>> end of each call? (Yes, I'm trying to come up with a little debugging
>> tool!:) Is there a single metaclass who's "__call__" method can be
>> wrapped to do this?
>
>You probably want sys.settrace, which is specifically designed for
>creating debuggers, and is the basis for pdb, the debugger in the
>standard library. See
>http://docs.python.org/lib/module-sys.html#l2h-5159
>
>Feel free also to look through my own debugging aid (for clues on how
>to implement your own, or just to use for your needs):
>http://projects.amor.org/misc/wiki/PyConquer
>
>
>Robert Brewer
>System Architect
>Amor Ministries
>[EMAIL PROTECTED]
-- 
http://mail.python.org/mailman/listinfo/python-list


Hooking any/all 'calls'

2006-12-27 Thread Kevin Little
In Python 2.4 or 2.5, what is the easiest way to hook any and all
callables such that designated code is executed at the very start and
end of each call? (Yes, I'm trying to come up with a little debugging
tool!:) Is there a single metaclass who's "__call__" method can be
wrapped to do this?

TIA,
   -k
 
-- 
http://mail.python.org/mailman/listinfo/python-list


ftplib errors/exceptions

2006-07-30 Thread Matthew Little
I'm new to Python and I am writing a simple FTP client.  I am having trouble handling errors like connection refused, invalid username or password, and the like.  I can use a try exception block like thistry:  ftp=FTP('some_server')
  ftp.login()  # more linesexcept:  print "An error has occured.\n"This works fine to supress the errors, but I would like to be able to narrow the errors down so that I can print 'invalid username or password' or 'connection refused' rather than simply 'An error has occured'.  How would I go about narrowing down which errors occur? 
Thanks in advance
-- 
http://mail.python.org/mailman/listinfo/python-list

ADD HTML to the code

2005-12-04 Thread Little
Could someone tell me how to add some HTML tags to this program. I want
to be able to change the background color, add some headers, and put a
table below the map that will be displayed. Could someone please tell
me how to add this to the current program. Thanks in advance.

Red.py

""" Publisher example """

def query(req, building=""):
# NOTE:  best way to understand this is to see the output,
#  that is, to "view source" on the generated web page
# read common header for any google mapping
f = file('/home/ta/public_html/maplish/googleHead.html','r')
t = f.read()
f.close()
# define the two buildings we know (because no SQL is done here)
buildings =  [ ("cb", "Cambus Office",  "-91.552977", "41.659655")
]
buildings +=  [ ("va/hardlib", "VA/Hardin Library", "-91.549501",
"41.662348") ]
buildings +=  [ ("hancher", "Hancher Auditorium",  "-91.538214",
"41.669529") ]
buildings +=  [ ("currier", "Currier Hall",  "-91.534996",
"41.666163") ]
buildings +=  [ ("schaeffer", "Schaeffer Hall",  "-91.535296",
"41.660969") ]
buildings +=  [ ("shospital", "South Hospital",  "-91.548900",
"41.658885") ]
str = ''  #  in case no buildings match, use empty string
for x in buildings:
   a,b,c,d = x   # isolate all the tuple components into a,b,c,d
   if building.lower() == a:
  # construct javascript, using Python %s to substitute names
and data
  # see http://docs.python.org/lib/typesseq-strings.html if
needed
  str =  'var bldg%s = new GPoint( %s, %s);\n' % (a, c, d)
  str += 'var mrk%s = new GMarker( bldg%s );\n' % (a, a)
  str += 'var htm%s = "%s";\n' % (a, b)
  str += 'GEvent.addListener(mrk%s,"click",function() {' % a
  str += 'mrk%s.openInfoWindowHtml(htm%s); });\n' % (a, a)
  str += 'map.addOverlay(mrk%s);\n' % a
# output markers, if any
t = t + str
# then add trailing html to finish page
trail = "//]]>   "
t = t + trail
return t

htaccess

SetHandler python-program
PythonHandler mod_python.publisher
PythonDebug On

googleHead.html

http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
http://www.w3.org/1999/xhtml";>
  
  University of Iowa Cambus
http://maps.google.com/maps?file=api&v=1&key=ABQIoq-X4K0kg9eYo1EhqRtUSxRepKXVB5XJtiHJ0W4XJYyDQ5hNnxQKi9AqI9J1B9uwt8TVJptjDwSqPA";
type="text/javascript">
  
  

Street Address in Iowa City:





Putting in an html table

2005-12-04 Thread Little
Could someone start me on putting in a table into this code, and some
HTML tags. I would to make the table below the map and have a header at
the top. Thanks for the help.

""" Publisher example """

def query(req, building=""):
# NOTE:  best way to understand this is to see the output,
#  that is, to "view source" on the generated web page
# read common header for any google mapping
f = file('/home/ta/public_html/maplish/googleHead.html','r')
t = f.read()
f.close()
# define the two buildings we know (because no SQL is done here)
buildings =  [ ("cb", "Cambus Office",  "-91.552977", "41.659655")
]
buildings +=  [ ("va/hardlib", "VA/Hardin Library", "-91.549501",
"41.662348") ]
buildings +=  [ ("hancher", "Hancher Auditorium",  "-91.538214",
"41.669529") ]
buildings +=  [ ("currier", "Currier Hall",  "-91.534996",
"41.666163") ]
buildings +=  [ ("schaeffer", "Schaeffer Hall",  "-91.535296",
"41.660969") ]
buildings +=  [ ("shospital", "South Hospital",  "-91.548900",
"41.658885") ]
str = ''  #  in case no buildings match, use empty string
for x in buildings:
   a,b,c,d = x   # isolate all the tuple components into a,b,c,d
   if building.lower() == a:
  # construct javascript, using Python %s to substitute names
and data
  # see http://docs.python.org/lib/typesseq-strings.html if
needed
  str =  'var bldg%s = new GPoint( %s, %s);\n' % (a, c, d)
  str += 'var mrk%s = new GMarker( bldg%s );\n' % (a, a)
  str += 'var htm%s = "%s";\n' % (a, b)
  str += 'GEvent.addListener(mrk%s,"click",function() {' % a
  str += 'mrk%s.openInfoWindowHtml(htm%s); });\n' % (a, a)
  str += 'map.addOverlay(mrk%s);\n' % a
# output markers, if any
t = t + str
# then add trailing html to finish page
trail = "//]]>   "
t = t + trail
return t

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


Re: mod_python

2005-11-05 Thread Little
I have created the following database but the following errors occur
when trying to execute the code.

html source:


Click here to display information from Chocolate menu:


Press to view the display




Please provide data for chocolate to be added:



Name:
Rating:  
Price :  






form.py source

import MySQLdb

def addchocolate(z_Name, z_rating, z_price):

# make sure the user provided all the parameters
if not (z_Name and z_rating and z_price):
return "A required parameter is missing, \
   please go back and correct the error"
db =
MySQLdb.connect(host="localhost",user="hayward",passwd="hayward",db="hayward")
cursor = db.cursor()
cursor.execute(
"""INSERT INTO InventoryList (artist, title, rating) VALUES (%s,
%s, %s)""", (z_Name, z_rating, z_price) )
db.commit()
cursor.close()
db.close()

def display(rating):
db =
MySQLdb.connect(host="localhost",user="hayward",passwd="hayward",db="hayward")
cursor = db.cursor()
cursor.execute("""SELECT * FROM InventoryList""")
result = cursor.fetchall()
cursor.close()
db.close()
parsesongs(result)
return

def parsesongs(rawstring):
print 'Chocolate Inventory'
print
'---'
print 'Name   Rating
Price  '
print
'---'
for i in range (0, len(rawstring)):
table = ''
Name = rawstring[i][0]
table = table + Name
for j in range (0, (29 - len(Name))):
table = table + ' '
Rating = rawstring[i][1]
table = table + Rating
for k in range (0, (29 - len(Rating))):
table = table + ' '
Price = str(rawstring[i][2])
table = table + Price
print table
print
'---'
return

errors that occur
press display:
Mod_python error: "PythonHandler mod_python.publisher"

Traceback (most recent call last):

  File "/usr/lib/python2.3/site-packages/mod_python/apache.py", line
193, in Dispatch
result = object(req)

  File "/usr/lib/python2.3/site-packages/mod_python/publisher.py", line
173, in handler
result = apply(object, (), args)

TypeError: display() takes exactly 1 argument (0 given)

press the addition of the items:
Mod_python error: "PythonHandler mod_python.publisher"

Traceback (most recent call last):

  File "/usr/lib/python2.3/site-packages/mod_python/apache.py", line
193, in Dispatch
result = object(req)

  File "/usr/lib/python2.3/site-packages/mod_python/publisher.py", line
173, in handler
result = apply(object, (), args)

  File
"/home/hayward/public_html/Homework/Python_Executable_Publisher/form.py",
line 11, in addchocolate
cursor.execute(

  File "/usr/lib/python2.3/site-packages/MySQLdb/cursors.py", line 137,
in execute
self.errorhandler(self, exc, value)

  File "/usr/lib/python2.3/site-packages/MySQLdb/connections.py", line
33, in defaulterrorhandler
raise errorclass, errorvalue

OperationalError: (1054, "Unknown column 'artist' in 'field list'")
 
Thanks for the help

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


mod_python

2005-11-05 Thread Little
I can't figure out how to build this type of program using the
publisher handler. I have the following connected to the program
SetHandler python-program
PythonHandler mod_python.publisher
PythonDebug On

But what I would like to do would be have a german word as the
parameter in the HTTP request and have the english world printed out on
the screen. Yes this will be a small dictionary but I just want to be
able to understand how to build the program and have it work without
any errors. Thanks for any help.

PS I understand the example of printing the say portion in the
mod_python manual but can't get past that.

Again Thanks!!

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


Re: HELP!! Accessing other machines with an IIS CGI script

2005-09-15 Thread little emma
Thanks for the info.  I'm going to repost this in comp.lang.python as well
as in a couple of MS IIS groups with some additional information (code
snippets and results).

Paul

"Roger Upole" <[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]
> Without knowing what operation fails, it's kind of
> difficult to give any meaningful answers.
> At what point in the code do you get the error ?
>
> If IIS runs under a local account, it might not have
> permission to access the other machine, or to impersonate
> a domain user.
>
> You might want to set up auditing on the
> folder you're trying to list, and see exactly what user
> IIS is connecting as (or if it's connecting at all).
>
>hth
>Roger
>
>
> "paulp" <[EMAIL PROTECTED]> wrote in message
news:[EMAIL PROTECTED]
> > Greetings,
> >
> > I'm working on a CGI program that will run under MS IIS 5.0 and will
> > browse folders on three other machines, building HTML pages that will
> > provide links to these folders.
> >
> > Essentially, the CGI will connect to each machine in turn, doing the
> > FindFirst/FindNext process based on the current criteria.  It will
> > select certain files/folders, and build an HTML page as it goes.
> >
> > The premise is fine.  If I run the program from the command line, it
> > seems to work fine and I get my HTML code out.  I can copy the code
> > into a separate file, open it in the browser, and all appears right
> > with the world.
> >
> > However, when I try to run the CGI from the browser itself, I get all
> > kinds of problems.  The first one I got was a 1312, "A specified logon
> > session does not exist.  It may have already been terminated."  After
> > doing some searching, I began to investigate impersonation of a logged
> > on user.  This produces a different error: 1314, "A required privilege
> > is not held by the client."
> >
> > I've been arguing with this now for several days and the frustration
> > level is beginning to get quite high.  Has anyone else ever tried this?
> > I find it hard to believe that I'm the first to do this.
> >
> > Of course, one of my problems is that I'm neither an IIS guru nor an
> > Admin guru.  And we have neither here in the office.
> >
> > I'm coding this in Python 2.4 and the Windows extensions.  I have a
> > number of other CGI programs in Python running under IIS that work
> > correctly, but those only do database accesses.  This one I'm trying to
> > put together is the first one to actually do file searches.
> >
> > I have set the privileges for the logged on account on my IIS box for
> > SE_TCB_NAME, SE_CHANGE_NOTIFY_NAME and SE_ASSIGNPRIMARYTOKEN_NAME and
> > rebooted.  To no avail.  I'm not sure if there are additional
> > alterations that need to be done to the security policies or not.
> > Again, I'm not a guru.
> >
> > If anyone can give me more information/guidance I would greatly
> > appreciate it.  If you need more information from me, I will do my best
> > to provide it.
> >
> > TIA,
> >
> > Paul
> >
>
>
>
> == Posted via Newsfeeds.Com - Unlimited-Uncensored-Secure Usenet
News==
> http://www.newsfeeds.com The #1 Newsgroup Service in the World! 120,000+
Newsgroups
> = East and West-Coast Server Farms - Total Privacy via Encryption
=


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


Re: Adding bound methods dynamically... CORRECTED

2005-08-30 Thread Kevin Little
#!/usr/bin/env python

# Sorry... :} cut/paste error fixed...

'''
I want to dynamically add or replace bound methods in a class.  I want
the modifications to be immediately effective across all instances,
whether created before or after the class was modified.  I need this
to work for both old ('classic') and new style classes, at both 2.3
and 2.4.  I of course want to avoid side effects, and to make the
solution as light-weight as possible.

Question for the experts: Is the solution coded in AddBoundMethod()
acceptable to the Pythonian Gods? :) It does seem to work -- tested
at 2.3.5 (RH Linux) and 2.4.1 (WinXP)

Is there a more pythonic way that's as straight forward?
'''

def AddBoundMethod( cls, name, method ):
   '''
   Dynamically add to the class 'cls' a bound method.

   Invoking this method instantly adds (or overwrites) the
   bound method identified by 'name' with the code contained in
   'method', EVEN FOR PRE-EXISTING INSTANCES OF THE CLASS. The
   'method' parameter should be a non-class function that has 'self'
   as its first parameter.
   '''

   try: types
   except NameError: import types

   #
   # this is the crux of this example, short and sweet...
   #
   exec "%s.%s = types.MethodType( method, None, %s )" \
  % ( cls.__name__, name, cls.__name__ )

#
# The remainder (50x longer than the solution!) is test code...
#

# one new-style class...
class NewStyleClass( object ):

   def __init__ ( self, objname ):
  print "Created a NewStyleClass, id %d, %s" % \
( id( self ), objname )
  self.objname = objname

   def ExistingMethod( self, msg ):
  print "Original ExistingMethod, id %d, %s: '%s'" % \
( id( self ), self.objname, msg )

# one 'classic' style class...
class OldStyleClass:

   def __init__ ( self, objname ):
  print "Created a OldStyleClass, id %d, %s" % \
( id( self ),  objname )
  self.objname = objname

   def ExistingMethod( self, msg ):
  print "Original ExistingMethod, id %d, %s: '%s'" % \
( id( self ), self.objname, msg )

# two non-class functions that *look* like bound methods in a class;
# one returns a value, the other just outputs a string...
def NeverInOriginalClass( self, msg ):
   return "Never in original class, id %d, %s: '%s'" % \
  ( id( self ), self.objname, msg )

def NewExistingMethod( self, msg ):
   print  "REPLACED ExistingMethod, id %d, %s: '%s'" % \
  ( id( self ), self.objname, msg )

# a test routine...
def Test( cls ):

   print "--- %s --" % \
 cls.__name__

   print "type of class %s is '%s'" % ( cls.__name__, type( cls ) )

   before_change = cls('instance created before change')

   print "type of object before_change is '%s'" % type(before_change)

   # 'A' shows that we start with an existing method
   before_change.ExistingMethod( 'A' )

   print "*** Replacing bound method 'ExistingMethod'..."

   AddBoundMethod( cls, "ExistingMethod", NewExistingMethod )

   after_change = cls( 'instance created AFTER  change' )

   print "type of after_change is '%s'" % type( after_change )

   # 'B' and 'C' show we've replaced an existing method, both on
   # pre-existing instances and instances created after using
   # AddBoundMethod()
   before_change.ExistingMethod( 'B' )
   after_change.ExistingMethod( 'C' )

   print "*** Adding new bound method 'AddedMethod'..."

   AddBoundMethod( after_change.__class__, "AddedMethod",
   NeverInOriginalClass )

   # 'D' and 'E' show we've added a brand new method, both on
   # pre-existing instances and instances created after using
   # AddBoundMethod()
   print "%s" % before_change.AddedMethod( 'D' )
   print "%s" % after_change.AddedMethod( 'E' )


if __name__ == '__main__':

   Test( OldStyleClass )
   Test( NewStyleClass )

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


Adding bound methods dynamically...

2005-08-30 Thread Kevin Little
#!/usr/bin/env python

'''
I want to dynamically add or replace bound methods in a class.  I want
the modifications to be immediately effective across all instances,
whether created before or after the class was modified.  I need this
to work for both old ('classic') and new style classes, at both 2.3
and 2.4.  I of course want to avoid side effects, and to make the
solution as light-weight as possible.

Question for the experts: Is the solution coded in AddBoundMethod()
acceptable to the Pythonian Gods? :) It does seem to work -- tested
at 2.3.5 (RH Linux) and 2.4.1 (WinXP)

Is there a more pythonic way that's as straight forward?
'''

def AddBoundMethod( cls, name, method ):
   '''
   Dynamically add to the class 'cls' a bound method.

   Invoking this method instantly adds (or overwrites) the
   bound method identified by 'name' with the code contained in
   'method', EVEN FOR PRE-EXISTING INSTANCES OF THE CLASS. The
   'method' parameter should be a non-class function that has 'self'
   as its first parameter.
   '''

   try: types
   except NameError: import types

   #
   # this is the crux of this example, short and sweet...
   #
   exec "%s.%s = types.MethodType( method, None, %s )" \
  % ( cls.__name__, name, cls.__name__ )

#
# The remainder (50x longer than the solution!) is test code...
#

# one new-style class...
class NewStyleClass( object ):

   def __init__ ( self, objname ):
  print "Created a NewStyleClass, id %d, %s" % \
( id( self ), objname ) self.objname = objname

   def ExistingMethod( self, msg ):
  print "Original ExistingMethod, id %d, %s: '%s'" % \
( id( self ), self.objname, msg )

# one 'classic' style class...
class OldStyleClass:

   def __init__ ( self, objname ):
  print "Created a OldStyleClass, id %d, %s" % \
( id( self ),  objname ) self.objname = objname

   def ExistingMethod( self, msg ):
  print "Original ExistingMethod, id %d, %s: '%s'" % \
( id( self ), self.objname, msg )

# two non-class functions that *look* like bound methods in a class;
# one returns a value, the other just outputs a string...
def NeverInOriginalClass( self, msg ):
   return "Never in original class, id %d, %s: '%s'" % \
  ( id( self ), self.objname, msg )

def NewExistingMethod( self, msg ):
   print  "REPLACED ExistingMethod, id %d, %s: '%s'" % \
  ( id( self ), self.objname, msg )

# a test routine...
def Test( cls ):

   print "--- %s --" % \
 cls.__name__

   print "type of class %s is '%s'" % ( cls.__name__, type( cls ) )

   before_change = cls('instance created before change')

   print "type of object before_change is '%s'" % type(before_change)

   # 'A' shows that we start with an existing method
   before_change.ExistingMethod( 'A' )

   print "*** Replacing bound method 'ExistingMethod'..."

   AddBoundMethod( cls, "ExistingMethod", NewExistingMethod )

   after_change = cls( 'instance created AFTER  change' )

   print "type of after_change is '%s'" % type( after_change )

   # 'B' and 'C' show we've replaced an existing method, both on
   # pre-existing instances and instances created after using
   # AddBoundMethod()
   before_change.ExistingMethod( 'B' )
   after_change.ExistingMethod( 'C' )

   print "*** Adding new bound method 'AddedMethod'..."

   AddBoundMethod( after_change.__class__, "AddedMethod",
   NeverInOriginalClass )

   # 'D' and 'E' show we've added a brand new method, both on
   # pre-existing instances and instances created after using
   # AddBoundMethod()
   print "%s" % before_change.AddedMethod( 'D' )
   print "%s" % after_change.AddedMethod( 'E' )


if __name__ == '__main__':

   Test( OldStyleClass )
   Test( NewStyleClass )

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


Re: Python or PHP?

2005-04-28 Thread Alan Little
Steve Holden <[EMAIL PROTECTED]> wrote in message news:<[EMAIL PROTECTED]>...
> John Bokma wrote:
> > Alan Little wrote:
> > 
> > 
> >>Steve Holden <[EMAIL PROTECTED]> wrote:
> >>
> >>
> >>>Your statement then becomes
> >>>
> >>>select * from foo where bar=1; drop table foo
> >>>
> >>>which is clearly not such a good idea.
> >>
> >>I'm sure Steve is very well aware of this and was just providing a
> >>simple and obvious example, nevertheless it might be worth pointing
> >>out that anyody who connects their web application to their database
> >>as a user that has DROP TABLE privileges, would clearly be in need of
> >>a lot more help on basic security concepts than just advice on
> >>choosing a programming language.
> > 
> > 
> > True. But how does it stop someone who uses inserts? (I exclude the case 
> > inserts are not needed).

Inserts are indeed not needed, if you really don't want to allow them.
The web app user connects to a schema that has no direct write
privileges on anything. Instead it has execute permissions on stored
procedures in another schema that do the writes. In Oracle, at any
rate, the stored procedure then runs with the privileges of the schema
it is in, but the calling user doesn't need or get those privileges.
Over the top in many cases, but it's an extra layer of defence if you
want it.

> > 
> > 
> >>This goes back to the point somebody made earlier on in the thread -
> >>many web applications can be implemented as fairly simple wrappers
> >>around properly designed databases. "Properly designed" includes
> >>giving some thought to table ownership and privileges.
> > 
> > 
> > One should stop SQL injection always, no matter if the database takes care 
> > of it or not. There is no excuse (like, yeah, but I set up the privileges 
> > right) for allowing SQL injection, ever.

Wasn't suggesting that for a moment.

> > 
> Correct. If a thing can't go wrong, it won't.
> 
> In security several levels of defense are better than just one, so 
> database authorization and SQL injection removal should be considered 
> complimentary techniques of a "belt and braces" (US: "belt and 
> suspenders") approach.
> 
> regards
>   Steve

I completely agree of course. Do both.
-- 
http://mail.python.org/mailman/listinfo/python-list


Re: Python or PHP?

2005-04-25 Thread Alan Little
Steve Holden <[EMAIL PROTECTED]> wrote:

>Your statement then becomes
>
>select * from foo where bar=1; drop table foo
>
>which is clearly not such a good idea.

I'm sure Steve is very well aware of this and was just providing a
simple and obvious example, nevertheless it might be worth pointing
out that anyody who connects their web application to their database
as a user that has DROP TABLE privileges, would clearly be in need of
a lot more help on basic security concepts than just advice on
choosing a programming language.

This goes back to the point somebody made earlier on in the thread -
many web applications can be implemented as fairly simple wrappers
around properly designed databases. "Properly designed" includes
giving some thought to table ownership and privileges.
-- 
http://mail.python.org/mailman/listinfo/python-list


xmlrpclib with technorati

2004-12-15 Thread Alan Little
I'm trying to write a generic weblog update notifier using xmlrpclib,
starting with technorati. What I want to do is something like this :

XML config file that would look like this:





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