def create(self): view_id = self.params.get('user_view_id') view = UserView.get_by_id(int(view_id)) config = yaml.load(view.config) rec = ProfileCore(user_db_id=view.user_db_id,user=users.get_current_user()) for col in config: if col['checked'] == 'checked': val = self.params.get(col['name']) if val: setattr(rec,col['name'],val) rec.put() data = {'status':'success','flexReload':'true'} self.render(json=self.to_json(data))
def import_csv(self): if self.request.method.upper() == "GET": pass if self.request.method.upper() == "POST": data={'status':'success','msg':'アップロードが完了しました','r':'/'} if not self.user: self.render(json=self.to_json({'status':'error','msg':'不正なリクエスト'})) return # いったんワークエリアにデータをコピー bin = self.params.get('file') if not bin: self.render(json=self.to_json({'status':'error','msg':'ファイルを指定してください'})) return fname = self.request.body_file.vars['file'].filename udb = UserDb(user=self.user,name=unicode(fname,self.__guess_charset(fname))) udb.put() # ついでにビューもつくってしまう (viewのカラムのcheckedを一反外す) v = UserView(user_db_id = udb) v.put() # カレントのビューをこれにするためにcv_idをセット data['cv_id']=str(v.key().id()) # viewのカラムのcheckedを一反外し、csvにあるカラムのみ有効にする config = copy.deepcopy(ProfileCore.disp_columns) for col in config: if col['type'] != 'hidden': col['checked'] = '' #try: lines = [] colinfo = None for line in bin.splitlines(): if line[0] == '#' or line[0:2] == '"#': continue # カラム情報の取得 if not colinfo: for row in csv.reader(line): for e in row: if colinfo == None: colinfo = [] colinfo.append(e) # カラムにcheckedをいれる for col in config: if col['name'] == e: col['checked'] = 'checked' break #data['msg'] = '|'.join(colinfo) v.config = yaml.dump(config) v.put() else: rec = ProfileCore(user_db_id=udb,user=self.user) rec.put() cols = copy.deepcopy(colinfo) wk = [] for row in csv.reader(line): for e in row: name = cols.pop(0) if name: setattr(rec,name,unicode(e,self.__guess_charset(e))) #wk.append("(%s,%s)" % (name,e)) #data['msg'] = '|'.join(wk) rec.put() #except Exception, ex: # data = {'status':'error','msg':'ファイルの読み込みに失敗しました'} self.render(json=self.to_json(data)) pass