def to_json(model_cls_list=None): """マスターデータをJsonに. """ if model_cls_list is None: model_cls_list = [ MasterData.CLASSES[i] for i in xrange(MasterData.MASTER_NUM_MAX) ] data = {} for model_cls in model_cls_list: modellist = model_cls.fetchValues(fetch_deleted=True) columnnames = model_cls.get_column_names() arr = [] for model in modellist: dic = {} for columnname in columnnames: dic[columnname] = getattr(model, columnname) try: Json.encode(dic) except: print model_cls.__name__ print dic raise arr.append(dic) data[model_cls.__name__] = arr return Json.encode(data)
def validate(self, value, model_instance): # json.loadsができるかどうか確認. if not self.editable: # Skip validation for non-editable fields. return models.TextField.validate(self, value, model_instance) try: Json.encode(value, ensure_ascii=False) except: raise exceptions.ValidationError(self.error_messages['notjson'])
def __write_json_obj(self, dict_data): """jsonレスポンス. """ close_connection() json_data = StrUtil.to_s(Json.encode(dict_data)) json_data = json_data.replace(': ', ':').replace(', ', ',') json_data = json_data.replace('\\r', '') self.response.headers['Content-Type'] = 'application/json;' self.response.send(json_data)
def output_json(self, output_dir, model_param_list): """jsonを出力. """ json_data = {} for model_param in model_param_list: fields = [field._asdict() for field in model_param.fields] model_param_dict = model_param._asdict() model_param_dict['fields'] = fields json_data[model_param.name] = model_param_dict json = Json.encode(json_data) filepath = os.path.join(output_dir, 'tables.json') self.write_file(filepath, StrUtil.to_s(json)) print 'Output json...{}'.format(output_dir)
def __proc_csv(self): """スプレッドシートで使える形式でcsv吐き出し. """ def makeRow(sequence): return ','.join(sequence) key_table = {} for column in self.model_cls.get_column_names(): key_table[column.replace('_', '')] = column for column in self.model_form_cls.get_extra_fields(): key_table[column.replace('_', '')] = column csv_row_list = [] model_all = self.getModelAll() columns = AdminModelEditHandler.__make_sheet_columns( self.model_form_cls) csv_row_list.append(makeRow(['"%s"' % column for column in columns])) for model in model_all: data_list = [] for column in columns: attrname = key_table[column] if hasattr(model, attrname): v = getattr(model, attrname) elif hasattr(model, 'get_%s' % attrname): v = getattr(model, 'get_%s' % attrname)() else: v = 'Unknown' if type(v) in (list, tuple, dict): t = Json.encode(v) else: t = str(v) t = t.replace('"', '""') #escape. data_list.append('"%s"' % t) csv_row_list.append(makeRow(data_list)) # 書き込む. csv_data = '' for row in csv_row_list: csv_data += '%s\n' % row csv_data = StrUtil.to_s( csv_data, dest_enc='shift-jis') #Excelで開くと文字化けするのでshift-jisに. self.osa_util.write_csv_data(csv_data, self.__get_csv_name())
def process(self): args = self.getUrlArgs('/promotionconditionget/') try: appname = args.get(0, '') requirement_idlist = [ int(s) for s in args.get(1, '').split(',') if s.isdigit() ] except: self.__sendErrorResponse(404) return model_mgr = self.getModelMgr() config = BackendApi.get_promotionconfig(model_mgr, appname, using=settings.DB_READONLY) if config is None: # アプリが存在しない. self.__sendErrorResponse(404) return if requirement_idlist: requirementlist = BackendApi.get_promotionrequirementmaster_list( model_mgr, appname, requirement_idlist, using=settings.DB_READONLY) else: # 全て検索. requirementlist = BackendApi.get_promotionrequirementmaster_all( model_mgr, appname, using=settings.DB_READONLY) json_obj = {} for requirement in requirementlist: text = requirement.text json_obj[str(requirement.id)] = text json_data = StrUtil.to_s(Json.encode(json_obj, ensure_ascii=False)) self.response.set_status(200) self.osa_util.write_json_data(json_data)
def __makePromotionApiRequest(handler, appname, endpoint_key, endpoint_urlparams, sandbox, params, method='GET', post_json=True): conf = PromotionSettings.CONFIG.get(appname) if conf is None: return osa_util = handler.osa_util if settings_sub.CROSS_PROMOTION: urls = conf['url'] conf_query = conf.get('query', {}) if sandbox: environment_name = 'staging' if handler.html_param.get( 'is_staging') else 'sandbox' else: environment_name = 'release' url_head = urls[environment_name] queryparams = conf_query.get(environment_name) or {} endpoint_urlparams.update(appname='Kyabaou') endpoint_url_format = conf.get('endpoint', {}).get( endpoint_key, PromotionSettings.DEFAULT_ENDPOINT[endpoint_key]) if queryparams: params = params or {} params.update(**queryparams) else: url_head = handler.url_cgi endpoint_urlparams.update(appname=appname) params = params or {} params[OSAUtil.KEY_APP_ID] = handler.appparam.app_id endpoint_url_format = PromotionSettings.DEFAULT_ENDPOINT[ endpoint_key] endpoint_url = endpoint_url_format.format(**endpoint_urlparams) url = '%s/%s' % (url_head, endpoint_url) body = None if method.lower() == 'get': if params: for k, v in params.items(): url = OSAUtil.addQuery( url, k, urllib.quote(v, safe='') if isinstance( v, (str, unicode)) else v) else: body = '' if post_json: body = Json.encode(params or {}) elif params: body = urllib.urlencode(params) handler.addlog(u'Promotion method:%s' % method) handler.addlog(u'Promotion url:%s' % url) headers = {} if osa_util.useragent.is_smartphone(): # そのままユーザエージェントを送信. headers['User-Agent'] = osa_util.useragent.data else: # なんか適当につけとくか. headers['User-Agent'] = UserAgent.IOS_USERAGENT_SAMPLE def work(osa_util, url, body, http_method, headers): if settings_sub.IS_LOCAL: timeout = None else: timeout = 3 if settings_sub.USE_LOG: handler.addlog('Promotion Headers:') for k, v in headers.items(): handler.addlog(' %s=%s' % (k, v)) try: tmp = osa_util.httpopen(url, body, http_method, headers, timeout=timeout) response = tmp.read() return Json.decode(response) except urllib2.HTTPError, err: raise CabaretError(u'Promotion HTTPError:%s' % err) except Exception, err: raise CabaretError(u'PromotionError:%s' % err)
def processHttpError(self, err): if err.code == 404: return Json.encode({'entry':[]}) raise err
def handle(self, *args, **options): print '================================' print 'make_serial_code' print '================================' CODE = 'EKY2J8P4BFLWMQZ0UX915HC73NVGAS6TR' PATTERN_NUM_MAX = 42618442977 INTERVAL = 3163483 OFFSET_1 = 12061 OFFSET_2 = 14206147659 # 個数. num = int(args[0]) # 出力先. writer = Command.Writer(args[1]) # index. index_filepath = os.path.join( os.path.dirname(__file__), '../../../../../../../tool/serial_index') lap = 0 index = 0 if os.path.exists(index_filepath): f = open(index_filepath, 'r') strjson = f.read() f.close() obj = Json.decode(strjson) lap, index = obj print 'Start from...lap=%d, index=%d' % (lap, index) def compress(v, length): s = intCompress(v, base=CODE) if length < len(s): raise 'OverFlow!!' s = '%s%s' % (CODE[0] * length, s) return s[-length:] # シリアル作成. serials = {} for _ in xrange(num): v0 = random.randint(0, 1088) v1 = ((index + OFFSET_1) * INTERVAL) % PATTERN_NUM_MAX v2 = ((index + OFFSET_2) * INTERVAL) % PATTERN_NUM_MAX s0 = compress(v0, 2) s1 = compress(v1, 7) s2 = compress(v2, 7) s = s0 + s1 + s2 if serials.has_key(s): raise 'dupplicate...' serials[s] = True writer.add(s) index += 1 if PATTERN_NUM_MAX <= index: raise 'index over...' writer.output(overwrite=False) # indexを保存. print '================================' strjson = Json.encode([lap, index]) print 'write index...%s' % strjson f = open(index_filepath, 'w') f.write(strjson) f.close() print '================================' print 'all done..'
def __proc_package_pc(self): """動画パッケージ(PC). """ zf = None zipdata = None try: name = self.request.get('_name') master = PcMoviePlayList.getValues(filters={'filename': name}) io = StringIO() zf = ZipFile(io, 'w') # マスターデータ. dic = {} columnnames = PcMoviePlayList.get_column_names() for columnname in columnnames: dic[columnname] = getattr(master, columnname) zf.writestr('master.json', Json.encode(dic)) def getData(filepath): f = None try: f = open(filepath, 'r') data = f.read() f.close() f = None except: if f: f.close() f = None raise return data # サムネイル画像. dirpath = settings_sub.MEDIA_DOC_ROOT name = Media.movie_pc_thumbnail(master.filename) filepath = os.path.join(dirpath, name) data = getData(filepath) zf.writestr(name, data) # 動画ファイル. filename = Media.movie_mp4(master.filename) zf.writestr( filename, getData(os.path.join(settings_sub.MEDIA_DOC_ROOT, filename))) err = zf.testzip() if err: raise CabaretError(err) zf.close() io.seek(0) zipdata = io.read() zf = None except: if zf: zf.close() zf = None if settings_sub.IS_LOCAL: raise self.response.set_status(500) raise f = open(os.path.join(settings_sub.TMP_DOC_ROOT, 'abc.zip'), 'w') f.write(zipdata) f.close() if zipdata: self.osa_util.write_zip(zipdata, 'movie') else: self.response.set_status(404) self.response.end() return
def get_body(self): postdata = self.get_postdata() if postdata: return Json.encode(self.get_postdata()) else: return ''
def render(self, name, value, attrs=None): try: value = Json.encode(value, ensure_ascii=False) except: pass return super(JsonInput, self).render(name, value, attrs=attrs)
def get_db_prep_value(self, value, connection, prepared=False): if value is None: return None return Json.encode(value, ensure_ascii=False)