Note that there are some explanatory texts on larger screens.

plurals
  1. POShould I use memcache?
    primarykey
    data
    text
    <p>My code produces a <a href="http://www.montao.com.br/montaolist.kmz" rel="nofollow">zip file</a> from Google App Engine for loading in a browser ie 10 KB &lt; size &lt; 1000 KB and I wonder if I can use memcache here or if the file is too large or already cached. I already use both memcache and set the cache control when generating the actual file first. </p> <pre><code>class KMZHandler(webapp.RequestHandler): def add_file(self, zip_file, url, file_name): """Fetch url, and add content as file_name to the zip file.""" result = urlfetch.fetch(url) if not result.content: return zip_file.writestr(file_name, result.content) def get(self): """Attempt to create a zip file.""" # you could set 'count' like this: # count = int(self.request.get('count', 1000)) zipstream = StringIO.StringIO() zip_file = zipfile.ZipFile(zipstream, "w") # repeat this for every URL that should be added to the zipfile url = 'http://www.koolbusiness.com/list.kml' self.add_file(zip_file, url, "list.kml") # we have finished with the zip so package it up and write the directory zip_file.close() # set the headers... self.response.headers["Cache-Control"] = "public,max-age=%s" % 86400 self.response.headers['Content-Type'] ='application/zip' self.response.headers['Content-Disposition'] = 'attachment;filename="list.kmz"' # create and return the output stream zipstream.seek(0) self.response.out.write(zipstream.read()) zipstream.close() </code></pre> <p>Here is the part that uses memcache and creates the actual file:</p> <pre><code>class KMLHandler(webapp.RequestHandler): 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-Type'] = 'application/vnd.google-earth.kml+xml' self.response.headers['Content-Length'] = len(output) self.response.out.write(output) </code></pre> <p>Thanks for the answers</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload