コード例 #1
0
    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)
コード例 #2
0
ファイル: fields.py プロジェクト: hitandaway100/caba
 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'])
コード例 #3
0
 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)
コード例 #4
0
 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)
コード例 #5
0
ファイル: __init__.py プロジェクト: hitandaway100/caba
    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())
コード例 #6
0
    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)
コード例 #7
0
    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)
コード例 #8
0
ファイル: api.py プロジェクト: hitandaway100/caba
 def processHttpError(self, err):
     if err.code == 404:
         return Json.encode({'entry':[]})
     raise err
コード例 #9
0
    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..'
コード例 #10
0
ファイル: movie.py プロジェクト: hitandaway100/caba
    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
コード例 #11
0
ファイル: request.py プロジェクト: hitandaway100/caba
 def get_body(self):
     postdata = self.get_postdata()
     if postdata:
         return Json.encode(self.get_postdata())
     else:
         return ''
コード例 #12
0
ファイル: fields.py プロジェクト: hitandaway100/caba
 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)
コード例 #13
0
ファイル: fields.py プロジェクト: hitandaway100/caba
 def get_db_prep_value(self, value, connection, prepared=False):
     if value is None:
         return None
     return Json.encode(value, ensure_ascii=False)