title: NameError: global name is not defined
body: <p>Hello
  My error is produced in generating a zip file. Can you inform what I should do?</p>
  
  <pre><code>main.py", line 2289, in get
      buf=zipf.read(2048)
  NameError: global name 'zipf' is not defined
  </code></pre>
  
  <p>The complete code is as follows:</p>
  
  <pre><code> def addFile(self,zipstream,url,fname):
       # get the contents          
       result = urlfetch.fetch(url)
  
       # store the contents in a stream
       f=StringIO.StringIO(result.content)
       length = result.headers['Content-Length']
       f.seek(0)
  
       # write the contents to the zip file
       while True:
         buff = f.read(int(length))
         if buff=="":break
         zipstream.writestr(fname,buff)
         return zipstream
  
   def get(self):   
      self.response.headers["Cache-Control"] = "public,max-age=%s" % 86400
      start=datetime.datetime.now()-timedelta(days=20)
      count = int(self.request.get('count')) if not self.request.get('count')=='' else 1000        
      from google.appengine.api import memcache
      memcache_key = "ads"
      data = memcache.get(memcache_key)
      if data is None:
        a= Ad.all().filter("modified &gt;", start).filter("url IN", ['www.koolbusiness.com']).filter("published =", True).order("-modified").fetch(count)
        memcache.set("ads", a)  
      else:
        a = data
      dispatch='templates/kml.html'
      template_values = {'a': a , 'request':self.request,}
      path = os.path.join(os.path.dirname(__file__), dispatch)
      output = template.render(path, template_values)    
      self.response.headers['Content-Length'] = len(output)    
      zipstream=StringIO.StringIO()
      file = zipfile.ZipFile(zipstream,"w")
      url = 'http://www.koolbusiness.com/list.kml'
      # repeat this for every URL that should be added to the zipfile
      file =self.addFile(file,url,"list.kml")
      # we have finished with the zip so package it up and write the directory
      file.close()
      zipstream.seek(0)
      # create and return the output stream
      self.response.headers['Content-Type'] ='application/zip'
      self.response.headers['Content-Disposition'] = 'attachment; filename="list.kmz"' 
      while True:
        buf=zipf.read(2048)
        if buf=="": break
      self.response.out.write(buf)
  </code></pre>