2012年3月13日火曜日

GAE/Pythonでtar.gzを解凍する

美咲フォントのBDF形式を扱いたかったので、まずは、Pythonでtar.gz形式の書庫を解凍するプログラムを組んでみた。


# -*- coding: utf-8 -*-
# gae_untargz.py 2012.3.13
import logging
import os
import StringIO
import tarfile
from google.appengine.api import users
from google.appengine.api import memcache
from google.appengine.ext import webapp
from google.appengine.ext.webapp import template
from google.appengine.ext.webapp.util import run_wsgi_app

class untargz(webapp.RequestHandler):
    def get(self):
        user = users.get_current_user()
 prefix = user.user_id()
 logging.info(prefix)
        targz_file = memcache.get(prefix + 'targz_file')
        filename = memcache.get(prefix + 'filename')
 action = self.request.get('action')
 member = self.request.get('member')
 members = []
 if targz_file:
     fileobj = StringIO.StringIO(targz_file)
     tar = tarfile.open(fileobj = fileobj, mode = 'r:gz')
            if action=='view':
  f = tar.extractfile(member)
  self.response.headers["Content-Type"] = "text/plain"
                self.response.out.write(f.read())
                return
     for tarinfo in tar:
         members.append(tarinfo.name)
 template_values = {'filename': filename, 'members': members, 'action': action}
        path = os.path.join(os.path.dirname(__file__), "templates", "untargz.html")
        self.response.out.write(template.render(path, template_values))

    def post(self):
        user = users.get_current_user()
 prefix = user.user_id()
        targz_file = self.request.get('targz_file')
        if targz_file:
            filename = self.request.body_file.vars['targz_file'].filename
     memcache.set(prefix + 'targz_file', targz_file, 180)
     memcache.set(prefix + 'filename', filename, 180)
        self.redirect('/untargz?action=list')

application = webapp.WSGIApplication([
    ('/untargz.*', untargz),
], debug=True)

def main():
    run_wsgi_app(application)

if __name__ == '__main__':
    main()

---

0 件のコメント: