GoogleAppEngineではimpが使えないらしい・・・

何をしたかったかって言うと、ひとつのGoogleAppEngineのアカウントで、アプリケーションをいっぱい動かしてみたいなー、そんでそいつらを眺めながら悦に入りたいなーみたいなことをしたかったのですが、それにはソースを分けてそれぞれに処理をハンドリングしてやんないといけないんですよね。

で、最初に考えたのが単純にファイルをimportしてやって、そいつらに対してページを割り当ててやればいいじゃん、ということでした。
これは上手くいきました。

appli1.py

import wsgiref.handlers

from google.appengine.ext import webapp

class MainPage(webapp.RequestHandler):
  def get(self):
    self.response.headers['Content-Type'] = 'text/plain'
    self.response.out.write('Hello, I'm appli1!')

map = [('/appli1', MainPage)]

appli2.py

import wsgiref.handlers

from google.appengine.ext import webapp

class MainPage(webapp.RequestHandler):
  def get(self):
    self.response.headers['Content-Type'] = 'text/plain'
    self.response.out.write('Hello, I'm appli2!')

map = [('/appli2', MainPage)]

main.py

import cgi
import os
import wsgiref.handlers

from google.appengine.ext import webapp,db

class Main(webapp.RequestHandler):
  def get(self):
    self.response.out.write("""
    <div><a href="/appli1">appli1</a></div><br>
    <div><a href="/appli2">appli2</a></div><br>
    """)

import appli1 
import appli2

def main():
  application = webapp.WSGIApplication( [("/",Main)]
                                        + appli1.map
                                        + appli2.map
                                       ,
                                       debug=True)
  wsgiref.handlers.CGIHandler().run(application)

if __name__ == "__main__":

ひとつのアカウントで二つのアプリケーションが作れて使えてはっぴーな気分。
でも、ここまでやって欲がでてきたのが、アプリ作るたびにmain.pyを書き直すのがたるい・・・ということ。どっかのフォルダにソースを放り込んだら自動的にアプリケーション追加、みたいなことになったらいいなぁと、要はプラグインっぽく、ですね。

で、こんなことを試してみたのですが・・

import cgi,os,re,imp
import wsgiref.handlers

from google.appengine.ext import webapp,db

maparr = []
mnamearr = []

dir = os.getcwd()
dir = os.path.join(dir,"apps");
for file in os.listdir(dir):
  m = re.match("^(.+).py$", file)
  if m :
       mname = m.group(1)
       f,n,d = imp.find_module(mname,[dir])
       mod = imp.load_module(mname, f, n, d)
       maparr= maparr + mod.map
       mnamearr.append(mname)

class Main(webapp.RequestHandler):
  def get(self):
    for mname in mnamearr:
      self.response.out.write(
        "<div><a href=\"/" + mname + "\">" + mname + "</a></div><br>"
      )

def main():
  application = webapp.WSGIApplication( [("/",Main)]
                                        + maparr
                                       ,
                                       debug=True)
  wsgiref.handlers.CGIHandler().run(application)

if __name__ == "__main__":
  main()

appsフォルダに作ったファイルを適当にぶっこんで、あとはimpモジュールが自動的にインポートしてくれますよーみたいなことをしたかったのですが、上手く動きませんでした。残念。
googleappengineのソースを除いてみると、きっちりimpが無効化してあった。
むむむ。