Mercurial > eagle-eye
view ikweb/ikweb/plugins/ikariam/__init__.py @ 247:7747bbe5b68e
start to develope Information Exchange Center of Ikariam Game. (prototpye)
author | "Hisn Yi, Chen <ossug.hychen@gmail.com>" |
---|---|
date | Mon, 01 Dec 2008 00:27:22 +0800 |
parents | |
children |
line wrap: on
line source
def load_model(modelname): try: return eval(modelname) except NameError: module = __import__("model.%s" % modelname.lower(), {}, {}, [modelname]) return getattr(module,modelname) class IkariamModelPlugin: server = "s4" base_url = "http://%s.ikariam.tw" % server @classmethod def get_by_gameid(cls, id): obj = cls.gql("WHERE game_id ="+str(id)+" ORDER BY lastupdate_at").get() return obj def _mk_attrs(self): from copy import copy attrs = copy(self.params) for ref_name in ref_attrs: try: modelname = self.params[ref_name].replace('_id','') model = load_model(modelname) obj = model.get_by_game_id(self.params[ref_name]) attrs[modelname] = obj except KeyError: pass return self._tr_attrtype(attrs, 'int', int_attrs) class IkaraimControllerPlugin: def _get_modelname(self): return self.__class__.__name__.replace('Controller','') def attrs(self): modelname = self._get_modelname() model = load_model(modelname) def fn(e): if e not in getattr(model, 'unshow_attrs', []) and \ e not in ['__module__','__doc__','_properties', 'unshow_attrs', 'int_attrs', 'lastupdate_at']: return e self.ui().render_result(200, '<br/>'.join(filter(fn, model.__dict__.keys()))) def show(self): datas = self._get_modeldatas() content = [] for k,v in datas.items(): content.append("%s:%s<br/>"%(k,v)) self.ui().render_result(200, ''.join(content)) def json(self): datas = self._get_modeldatas() self.ui().render_json_of(datas) def _get_modeldatas(self): modelname = self._get_modelname() model = load_model(modelname) obj = model.get_by_gameid(self.params['id']) return self._tr_attrtype(obj._entity,'str') def create(self): self._update('create') def edit(self): self._update('edit') def _update(self, mode='create'): modelname = self._get_modelname() model = load_model(modelname) if 'edit' == mode: obj = model.get_by_gameid(self.params['game_id']) else: obj = model attrs = self._mk_attrs() obj.update_attributes(attrs) obj.save() def _tr_attrtype(self, attrs, type, include_attrs=None): if not include_attrs: attrnames = attrs.keys() else: attrnames = include_attrs for attrname in attrnames: try: attrs[attrname] = eval(type)(attrs[attrname]) except KeyError: pass return attrs from gaeo.model import BaseModel BaseModel.__bases__ += (IkariamModelPlugin,) from gaeo.controller import BaseController BaseController.__bases__ += (IkaraimControllerPlugin,)