Another Sets Problem

Victor Subervi victorsubervi at gmail.com
Tue Dec 29 04:08:56 EST 2009


On Mon, Dec 28, 2009 at 4:23 PM, Steve Holden <steve at holdenweb.com> wrote:

> There is only one way for the piece of code you quote to print nothing
> (unless you suspect a bug in the Python interpreter, but the probability
> of that is so low compared with the probability of your making a mistake
> in interpretation of the data that I am going to ignore it).
>
> Hence my deduction. If types[x][0:3] != 'set' then the else clause would
> definitely print something. Hence types[x][0:3] == 'set', and the for
> statement is executing. But again, if field were anything other than an
> empty container it would produce printed output.
>
> But if it's empty, no printed output would be produced:
>
> >>> field = set([])
> >>> for f in field:
> ...   print "Steve is wrong"
> ...
> >>>
>
> Does this make sense?
>

Boy, does it! It looks great...on paper. Here's some revised code to debug:

#              print 'XXX', types[x]
              elif types[x][0:3] == 'set':
                for f in field:
                  print '<td>AAA%s</td>\n' % (field)
                else:
                  print 'YYY'

1) If I uncomment the commented line, it throws this error:

[Tue Dec 29 00:58:10 2009] [error] [client 208.84.198.58]   File
"/var/www/html/angrynates.com/cart/enterProducts2.py", line 138, referer:
http://angrynates.com/cart/enterProducts.py
[Tue Dec 29 00:58:10 2009] [error] [client 208.84.198.58]     elif
types[x][0:3] == 'set':, referer:
http://angrynates.com/cart/enterProducts.py
[Tue Dec 29 00:58:10 2009] [error] [client 208.84.198.58]        ^, referer:
http://angrynates.com/cart/enterProducts.py
[Tue Dec 29 00:58:10 2009] [error] [client 208.84.198.58] SyntaxError:
invalid syntax, referer: http://angrynates.com/cart/enterProducts.py
[Tue Dec 29 00:58:10 2009] [error] [client 208.84.198.58] Premature end of
script headers: enterProducts2.py, referer:
http://angrynates.com/cart/enterProducts.py

2) AAA prints out before the following fields:
AAASet(['Extra-small'])
AAASet(['purple:50404D'])

3) YYY *also* prints out twice!!

Here's the complete code once again:

#! /usr/bin/python

import MySQLdb
import cgi
import sys,os
sys.path.append(os.getcwd())
from login import login
from sets import Set

def enterProducts2():
  print '''Content-type: text/html

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title></title>
</head>
<body>
<form enctype='multipart/form-data' action='enterProducts3.py'
method='post'>
'''
  form = cgi.FieldStorage()
  store = form.getfirst('store')
  print "<input type='hidden' name='store' value='%s' />" % store
  user, passwd, db, host = login()
  count = 0
  count2 = 0
  db = MySQLdb.connect(host, user, passwd, db)
  cursor = db.cursor()
  cursor.execute('select ID from %s;' % store)
  test = cursor.fetchall()
  if len(test) > 0:
    cursor.execute('show columns from %s;' % store)
    colNames = [itm[0] for itm in cursor]
    types = [itm[1] for itm in cursor]
    colNamesWithCommas = ', '.join(colNames)
    try:
      cursor.execute('select ID from %s;' % store)
      ids = cursor.fetchall()
      if store == 'prescriptions':
        cursor.execute('show tables like "%PersonalData";')
        personalDataTables = [itm[0] for itm in cursor]
      else:
        personalDataTables = []
      print '<h1>%s</h1>\n<table><tr><td>\n' % (store[0].upper() +
store[1:])
      print '<h3>What do you want to do?</h3>\n<table><tr><td>\n'
      print "<input type=radio name='whatDo' value='insert' />Add<br />\n"
      print "<input type=radio name='whatDo' value='update' />Update<br
/>\n"
      print "<input type=radio name='whatDo' value='delete' />Delete<br
/>\n"
      print '</td></tr></table>\n<br /><br />\n'
      print '<table border=1>\n'
      print '<tr>\n'
      print '<th align=center><b>Check</b></th>\n'
      i = 0
      while i < len(colNames):
        if i == 0: # This is the ID field
          print '<th align=center><b>', colNames[i], '</b></th>\n'
          try:
            cursor.execute('describe relationships%s;' % (store[0].upper() +
store[1:]))
            relationshipsDescription = cursor.fetchall()
            cursor.execute('select * from relationships%s where %sID="%s";'
% (store[0].upper() + store[1:], store[0].upper() + store[1:], ids[0][0]))
            relationshipFields = cursor.fetchone()
            j = 0
            for relDescrip in relationshipsDescription:
              if j != 0: # Skip the store ID
                print '<th><b>%s Name</b></th>\n' % (relDescrip[0][:-2])
              j += 1
          except:
            pass # There are no relationships
        else:
          print '<th align=center><b>', colNames[i], '</b></th>\n'
        i += 1
      print '</tr>\n'
      j = 0
      z = 3
      a = 0
      for id in ids:
        a += 1
        j += 1
        for d in id:
          bg = ['#ffffff', '#d2d2d2', '#F6E5DF', '#EAF8D5']
          z += 1
          print '<tr bgcolor="%s">' % bg[z % 4]
          cursor.execute('select * from %s where ID=%s;' % (store, str(d)))
          col_fields = cursor.fetchall()
          col_fields = col_fields[0]
          tmp = []
          for field in col_fields:
            tmp.append(field)
          col_fields = []
          for field in tmp:
            col_fields.append(field)
          i = 0
          x = 0
          y = 0
          w = 0
          for field in col_fields:
            if colNames[x] == 'SKU':
              sku = field
            if colNames[x][:3] == 'pic':
              y += 1
              w += 1
              print '<td><input type="hidden" name="%s" />\n' % str(x)
#                im = Image.open(getpic)
#                width, height = im.size()
#                for infile in sys.argv[1:]:
#                  outfile = os.path.splitext(infile)[0] + "_thumb.jpg"
#                  if infile != outfile:
#                    try:
#                      im = Image.open(infile)
#                      im.thumbnail((128, (width/128)*height),
Image.ANTIALIAS)
#                      im.save(outfile, "JPEG")
#                    except IOError:
#                     print "cannot create thumbnail for ", infile
#                print '<img src="%s"><br /><br /></td>\n' % (outfile)
              print '<img src="getpic.py?store=%s&pic=%d&id=%s"
width="100"></td>\n' % (store, w-1, ids[0][0])
              count2 += 1
            else:
              if x == 0:
                # This is the ID field
                d = id[0]
                check = 'check' + str(d)
                i += 1
                print '<td><input type="checkbox" name="', check, '"
value="', field, '" /></td>\n'
                print '<td>%s</td>\n' % (field)
                if personalDataTables != []:
                  i = 0
                  for relField in relationshipFields:
                    if i != 0: # The first value is the same as d
                      sql = 'select FirstName, LastName from %sPersonalData
where ID="%s";' % (relationshipsDescription[i][0][:-2].lower(), relField)
                      cursor.execute(sql)
                      names = cursor.fetchone()
                      print '<td>%s %s</td>\n' % (names[0], names[1])
                    i += 1
#              print 'XXX', types[x]
              elif types[x][0:3] == 'set':
                for f in field:
                  print '<td>AAA%s</td>\n' % (field)
                else:
                  print 'YYY'
              else:
                if (isinstance(field, str)) and (len(field) > 60):
                  print '<td>%s</td>\n' % (field[:60] + '...')
                else:
                  print '<td>%s</td>\n' % (field)
            x += 1
      print '</tr><tr>\n'
      print '<td align=center colspan=', len(colNames) + 1, '>\n'
      print '</td></tr></table>\n'
      print '<input type="hidden" name="count" value="%s" />\n' % count2
      print '<input type="submit" value=" Send " />\n'
    except:
      print 'There is no data yet. Please add a product.\n<br /><br />'
      print "<input type='hidden' name='whatDo' value='insert' />\n"
      print '<input type="submit" value=" Add " />\n'
  else:
    print 'There is no data yet. Please add a product.\n<br /><br />'
    print "<input type='hidden' name='whatDo' value='insert' />\n"
    print '<input type="submit" value=" Add " />\n'
  print '''
</form>
</body>
</html>
'''
  cursor.close()

enterProducts2()

TIA,
beno
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-list/attachments/20091229/dc5c44fd/attachment.html>


More information about the Python-list mailing list