Victor Subervi wrote:
Hi;
I think I finally have an interesting problem for y'all. I need to import a script from a lower dir, forcing me to change dirs:

Wait a moment... Your assumption that you need to change directories is invalid. (And that means everything you do below this point unnecessary.)

Python provides many ways to easily import from arbitrary directories:

* Before run time, modify the environment variable
PYTHONPATH with the desired directory. Then import as normal.

* At run time, import sys and append the desired
   path to sys.path, and again import as normal.

* Check out the "imp" module which allows you to
   import from files specified via a path.

Straighten that out, then we can examine the following (suspicious) clams:
* that you must evaluate *before* some import
* that you must use globals
* python's problem with globals

Gary Herron





cwd = os.getcwd()
os.chdir('%s/..' % cwd)
sys.path.append(os.getcwd())
from templateFrame import top, bottom
os.chdir(cwd)

Because I've found I must do my form evaluations *before* changing dir as above, I am forced to call these values as globals:

form = cgi.FieldStorage()
store = form.getfirst('store')
cat = form.getfirst('cat')
id = form.getfirst('id')
pkg = form.getfirst('pkg')
patientID = form.getfirst('patientID')

Now, apparently because of python's problem with globals, when I call "id" as follows:

cursor.execute('select ProductID from productsPackages where PackageID=%s' % id)

I get the following error:

/var/www/html/angrynates.com/cart/Store_frame2.py <http://angrynates.com/cart/Store_frame2.py>
  135   cursor.close()
  136   bottom()
  137
  138 Store_frame2()
  139
Store_frame2 = <function Store_frame2>
/var/www/html/angrynates.com/cart/Store_frame2.py <http://angrynates.com/cart/Store_frame2.py> in Store_frame2()
  119     printAProduct()
  120   else:
121 cursor.execute('select ProductID from productsPackages where PackageID=%s' % id)
  122     for id in [itm[0] for itm in cursor]:
  123       printAProduct(id)
global cursor = <MySQLdb.cursors.Cursor object>, cursor.execute = <bound method Cursor.execute of <MySQLdb.cursors.Cursor object>>, global id = '1'

UnboundLocalError: local variable 'id' referenced before assignment
      args = ("local variable 'id' referenced before assignment",)

Full code below. Please advise.
TIA,
beno

#! /usr/bin/python

import string
import cgitb; cgitb.enable()
import cgi
import MySQLdb
import sys,os
from sets import Set
import fpformat
cwd = os.getcwd()
sys.path.append(cwd)
from login import login
from particulars import truncate

form = cgi.FieldStorage()
store = form.getfirst('store')
cat = form.getfirst('cat')
id = form.getfirst('id')
pkg = form.getfirst('pkg')
patientID = form.getfirst('patientID')

try:
  browser = form.getfirst('browser', 'all')
except:
  browser = headers()

os.chdir('%s/..' % cwd)
sys.path.append(os.getcwd())
from templateFrame import top, bottom
os.chdir(cwd)

ourFile = string.split(__file__, "/")
p = ourFile[len(ourFile) - 1]
p = p[: - 9]
site = ourFile[4][:-10]
if site != '':
  site = site[:-1]

user, passwd, db, host = login()
db = MySQLdb.connect(host, user, passwd, db)
cursor= db.cursor()

cursor.execute('describe %s;' % store)
descr = cursor.fetchall()
cols = []
for elt in descr:
  cols.append(elt[0])

def printAProduct(id=id):
  lastID = ''
  cursor.execute('select * from %s where ID="%s"' % (store, id))
  vals = cursor.fetchone()
  prodDict = dict(zip(cols, vals))
  for col, item in prodDict.iteritems():
    if col == 'ID':
      print '<input type="hidden" name="prodid" value="%s" />' % item
try: # Stores such as products (but not prescriptions) will pass through
      from particulars import ourOptions
      if col in ourOptions():
        print '<input type="hidden" name="%s" value="%s" />' % (col, item)
    except:
      pass
    if col[:3] != 'pic':
      notSet = 1
if isinstance(item, (str, int, long, float, long, complex, unicode, list, buffer, xrange, tuple)):
        print '<b>%s: </b>%s<br />\n' % (col, item)
      else:
        try:
          html = "<b>%s</b>: <select name='%s'>" % (col, col)
          notSet = 0
          for itm in item:
            try:
              color, number = itm.split('_')
              html += "<option value='%s'>%s</option>" % (itm, color)
            except:
              html += "<option value='%s'>%s</option>" % (itm, itm)
          html += "</select><br />"
          print html
        except:
          pass
#      if notSet == 1:
#        if len(col) > 49:
#          colX = col[:50] + '...'
#       else:
#         colX = col
#       print '<b>%s: </b>%s<br />\n' % (colX, item)
    elif col == 'pic1':
      try:
        if (item != None):
#      if (item != None) and (len(item > 0)):
print '<a href="getpic.py?store=%s&pic=%s&id=%s" class="highslide" href="getpic.py?store=%s&pic=%s&id=%s" onclick="return hs.expand(this)"><img src="getpic.py?store=%s&pic=%s&id=%s" width="100" height="80" alt="" align="left" border="0" title="Click to enlarge" style="border: 0px"></a><br clear="all" />\n' % (store, col[3:], id, store, col[3:], id, store, col[3:], id)
      except TypeError:
        raise
      except:
        raise
#      i += 1
#      try:
#        content = item[x].tostring()
#         pic = "tmp" + str(i) + ".jpg"
#        try:
#          os.remove(pic)
#        except:
#          pass
#        img = open(pic, "w")
#        img.write(content)
#        print '<img src="%s"><br /><br />' % pic
#        img.close()
#      except:
#        pass

def Store_frame2():
  top(browser, p)
  i = 0
  print '<tr>\n'
  print '<form method="post" action="cart.py">'
  print "<input type='hidden' name='store' value='%s' />" % store
  print "<input type='hidden' name='whatDo' value='insert' />"
  if pkg == 'no':
    printAProduct()
  else:
cursor.execute('select ProductID from productsPackages where PackageID=%s' % id)
    for id in [itm[0] for itm in cursor]:
      printAProduct(id)
  if store == 'prescriptions':
    print "<input type='hidden' name='quantity' value='1' />"
    print "<input type='submit' value=' Refill ' />"
  elif truncate()[store] != '':
    pass
  else:
print "<b>Quantity</b>: <input type='text' name='quantity' width='3' maxlength='3' /><br />"
    print "<input type='submit' value=' Add To Cart ' />"
  print '</form>'
  print '</td></tr></table>\n'
  print '</table>\n'
  cursor.close()
  bottom()

Store_frame2()


--
The Logos has come to bear
http://logos.13gems.com/

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

Reply via email to