Ejemplo n.º 1
0
    def optimize_ctx(self, app):
        try:
            # データベースオブジェクトを取得する
            db_list = CmsDb.getCmsDbList()
            if db_list is None:
                return False

            row_num = str(StrUtil.get_safe_config(app, 'CTX_MAX_OBJECT_CNT'))

            for db_info in db_list:
                StrUtil.print_debug("optimize_ctx db_id=[{}] begin.".format(
                    str(db_info.db_id)))
                cms_object = CmsObject()
                for object_info in cms_object.getCtxObjectList(
                        db_info.db_id, row_num):
                    cmsCtxData = CmsCtxData()
                    # cms_ctx_dataからレコード削除 (updateされた場合の対応)
                    cmsCtxData.delCmsCtxData(object_info.object_id,
                                             db_info.db_id)

                    # タイトルテキスト 例:<#IDX_TEXT_001#> : <#IDX_TEXT_002#>
                    ctx_title_rst = {
                        'CTX_TITLE': '',
                        'CTX_TEXT': '',
                        'CTX_ERROR_FLG': 0,
                        'CTX_ERROR_LOG': ''
                    }
                    cms_object.getCtxTitle(object_info.object_type_id,
                                           object_info.object_id, None,
                                           object_info.ctx_title_format,
                                           ctx_title_rst)

                    # cms_ctx_dataに登録する情報を設定する
                    cmsCtxData.db_id = db_info.db_id
                    cmsCtxData.object_id = object_info.object_id
                    cmsCtxData.object_updated_at = object_info.updated_at
                    cmsCtxData.ctx_title = ctx_title_rst['CTX_TITLE']
                    cmsCtxData.ctx_text = ctx_title_rst['CTX_TEXT']
                    cmsCtxData.ctx_error_log = ctx_title_rst['CTX_ERROR_LOG']
                    cmsCtxData.data_type = Const.DATA_TYPE_OBJECT
                    url = Const.URL_FORMAT.format(
                        str(StrUtil.get_safe_config(
                            app, 'CMS_SYS_URL')).strip('/') + '/property',
                        'func={}&db_id={}&id={}&object_id={}'.format(
                            'show_property', db_info.db_id,
                            object_info.parent_folder_id,
                            object_info.object_id))
                    cmsCtxData.ctx_url = url
                    cmsCtxData.ctx_error_flg = ctx_title_rst['CTX_ERROR_FLG']

                    # cms_ctx_dataに登録する
                    cmsCtxData.addCmsCtxData(cmsCtxData)

                    # INDEXに登録したら、 cms_object.ctx_indexed_flg=1にする
                    cms_object.ctxUpdObject(object_info.object_id, 1)

                    # cms_object_property, cms_file_typeからINDEX対象の属性やファイルを特定
                    cms_file = CmsFile()
                    for file_info in cms_file.get_ctx_file_list(
                            object_info.object_id):
                        if not ctx_allowed_file(file_info.file_name):
                            continue
                        cmsCtxData = CmsCtxData()

                        # ctx_text = ctx_text_format.format(ctx_text,
                        #                                   file_info.file_name + ":"
                        #                                   + os.path.join(file_info.dir_name,
                        #                                                  file_info.c_file_name))
                        StrUtil.print_debug(
                            'ctx_file file_info=[file_name={}; file_path={}]'.
                            format(
                                file_info.file_name,
                                os.path.join(file_info.dir_name,
                                             file_info.c_file_name)))

                        # CTX_TITLE_FOTMATの取得
                        cmsFileType = CmsFileType()
                        fileTypeInfo = cmsFileType.getFileTypeInfo(
                            file_info.file_type_id)

                        # タイトルテキスト 例:<#IDX_TEXT_001#> : <#IDX_TEXT_002#> (<#FILE_NAME#>)
                        ctx_title_rst = {
                            'CTX_TITLE': '',
                            'CTX_TEXT': '',
                            'CTX_ERROR_FLG': 0,
                            'CTX_ERROR_LOG': ''
                        }
                        cms_object.getCtxTitle(object_info.object_type_id,
                                               object_info.object_id,
                                               file_info.file_id,
                                               fileTypeInfo.ctx_title_format,
                                               ctx_title_rst)

                        ctx_text_rst = {
                            'CTX_TEXT': '',
                            'CTX_ERROR_FLG·': 0,
                            'CTX_ERROR_LOG': ''
                        }
                        CtxUtil._get_ctx_text(app, file_info, ctx_text_rst)

                        # URL
                        url = ''
                        # テキスト
                        ctx_text = Const.CONTACT_FORMAT.format(
                            ctx_title_rst['CTX_TEXT'],
                            ctx_text_rst['CTX_TEXT'])
                        # エラーメッセージ
                        ctx_error_log = ctx_title_rst['CTX_ERROR_LOG']
                        if len(ctx_error_log) != 0:
                            ctx_error_log += '\n'
                        ctx_error_log += ctx_text_rst['CTX_ERROR_LOG']

                        # cms_ctx_dataに登録する情報を設定する
                        cmsCtxData.db_id = db_info.db_id
                        cmsCtxData.object_id = object_info.object_id
                        cmsCtxData.object_updated_at = object_info.updated_at
                        cmsCtxData.ctx_title = ctx_title_rst['CTX_TITLE']
                        cmsCtxData.ctx_text = ctx_text
                        cmsCtxData.ctx_error_log = StrUtil.truncate(
                            ctx_error_log, 4000)
                        cmsCtxData.data_type = Const.DATA_TYPE_FILE
                        if ctx_text_rst['CTX_ERROR_FLG'] == 0:
                            url = Const.URL_FORMAT.format(
                                str(StrUtil.get_safe_config(
                                    app, 'CMS_SYS_URL')).strip('/') +
                                '/download_file', 'db_id={}&file_id={}'.format(
                                    db_info.db_id, file_info.file_id))
                        cmsCtxData.ctx_url = url
                        cmsCtxData.ctx_error_flg = ctx_text_rst[
                            'CTX_ERROR_FLG']

                        # cms_ctx_dataに登録する
                        cmsCtxData.addCmsCtxData(cmsCtxData)

                        cms_file = CmsFile(object_info.object_id)
                        # INDEXに登録したら、 cms_file.ctx_indexed_flg=1にする
                        cms_file.setCtxIndexedFlg(file_info.file_id, 1)

                    # DBごと処理後にtmpフォルダを空にする
                    CtxUtil._tmp_file_remove(app)
                StrUtil.print_debug('optimize_ctx db_id=[{}] end.'.format(
                    str(db_info.db_id)))
            db.session.commit()
        except Exception as e:
            db.session.rollback()
            tb = sys.exc_info()[2]
            StrUtil.print_error('optimize_ctx error_msg:{}'.format(
                str(e.with_traceback(tb))))
            CtxUtil._tmp_file_remove(app)
Ejemplo n.º 2
0
# coding:utf-8
import os
import sys

from app.lib.cms_lib.date_util import DateUtil
from app.lib.cms_lib.num_util import NumUtil
from app.lib.cms_lib.str_util import StrUtil

sys.path.append('/home03/cms/flask/cms/')
os.environ['NLS_LANG'] = 'JAPANESE_JAPAN.AL32UTF8'

from app import create_app

app = create_app()
app.app_context().push()

# 日付チェック
rst = DateUtil.check_date_format('2020/02/18', 'YYYY/MM/DD')
StrUtil.print_debug(rst)

# 日付チェック
rst = NumUtil.is_number_data('aa')
StrUtil.print_debug(rst)
rst = NumUtil.is_integer_data('10.22')
StrUtil.print_debug(rst)
num_prop = {'sign_ref': '', 'i_ref': '', 'f_ref': ''}
rst = NumUtil.split_number('10.22', num_prop)
StrUtil.print_debug(rst)

rst = StrUtil.truncate('ああああああああああああああああああああああああああああああああああああああああああ', 20)
StrUtil.print_debug(rst)