Beispiel #1
0
    def wrapper(self, *args, **kw):
        # 请求开始时间
        start_ts = utils.timestamp()

        values = func(self, *args, **kw)

        web.header('Content-type', 'application/json')

        if not isinstance(values, (tuple, list)):
            values = [values]

        # data = { RESPONSE_FIELDS[i]: value for i, value in enumerate(values) if i < 3 }
        data = {
            field: values[i] if i < len(values) else None
            for i, field in enumerate(RESPONSE_FIELDS)
        }
        # 包含服务器时间
        data['time'] = int(utils.timestamp()) - 2
        data['ms'] = int((utils.timestamp() - start_ts) * 1000)
        data = utils.json_dumps(data, utils.JsonEncoder)
        # 是否提供第四个参数
        # 如果提供了第四个参数, 则是一个 jsonp callback 调用
        if len(values) == 4:
            return '%s(%s)' % (values[3], data)

        return data
Beispiel #2
0
    def update(task, mdb=None):
        "更新task记录"
        message = task.status_text
        if isinstance(message, (list, tuple, dict, storage)):
            message = utils.json_dumps(message)

        mdb = mdb or db.manager.master_core
        return mdb.update('task',
                          last_time=web.SQLLiteral('UNIX_TIMESTAMP()'),
                          status=task.status.value,
                          status_text=message,
                          content=utils.json_dumps(task.content),
                          exec_times=web.SQLLiteral('exec_times + 1')
                          if task._executed else web.SQLLiteral('exec_times'),
                          active_time=task.active_time,
                          where='id = $id',
                          vars=task)
Beispiel #3
0
 def update_raw_info(video_id, info):
     """
     更新视频原始信息中的 info 字段
     :param video_id:
     :param info:
     :return:
     """
     return db.manager.master_media.update('video_raw',
                                           info = utils.json_dumps(info),
                                           where = 'video_id = $video_id',
                                           vars = locals())
Beispiel #4
0
 def add(task, mdb=None):
     "添加任务记录"
     mdb = mdb or db.manager.master_core
     return mdb.insert('task',
                       type=task.type.value,
                       type_id=task.type_id,
                       content=utils.json_dumps(task.content),
                       time_created=web.SQLLiteral('UNIX_TIMESTAMP()'),
                       active_time=task.active_time,
                       last_time=task.last_time,
                       tail_num=task.tail_num)
Beispiel #5
0
 def user_async(self, user_id, data=None):
     """
     向给定用户异步推送消息
     :param user_id: 用户内码
     :param data: 数据
     :return:
     """
     return self.push_async([{
         'channel': 'bn_%s' % utils.id_to_hex(user_id),
         'data': utils.json_dumps(data),
     }])
Beispiel #6
0
    def broadcast(self, data, delay=0):
        "广播一条消息"
        if not isinstance(data, (str, unicode)):
            data = utils.json_dumps(data)

        if delay > 0:
            utils.sleep(delay)

        try:
            resp = http.GET('%sbroadcast?content=%s' %
                            (self.admin_url, utils.urlencode(data)))
            return resp.text.strip().lower() == 'ok'
        except:
            return False
Beispiel #7
0
    def add_execlog(task, message, mdb=None):
        """
        添加任务执行日志
        :param task:
        :param message:
        :return:
        """
        if isinstance(message, (list, tuple, dict, storage)):
            message = utils.json_dumps(message)

        mdb = mdb or db.manager.master_core
        return mdb.insert('task_log',
                          task_id=task.id,
                          status=task.status.value,
                          status_text=message,
                          status_time=web.SQLLiteral('UNIX_TIMESTAMP()'))
Beispiel #8
0
    def __exit__(self, exc_type, exc_val, exc_tb):
        if exc_val and isinstance(exc_val, Exception):
            self.mark_error(
                traceback.format_exception(exc_type, exc_val, exc_tb))

        if self.has_error:
            self.error(self.message[-1])
        else:
            self.debug(utils.json_dumps(self.message))

        # 记录任务日志
        mdb = db.manager.master_core
        with mdb.transaction():
            self.task.save(mdb=mdb)
            self.save_task_logs(mdb=mdb)

        return self.ignore_error
Beispiel #9
0
    def wrapper(self, *args, **kw):
        values = func(self, *args, **kw)
        if not isinstance(values, (tuple, list)):
            values = [values]

        web.header('Content-type', 'application/json')
        data = utils.json_dumps(
            {
                RESPONSE_FIELDS[i]: value
                for i, value in enumerate(values) if i < 3
            }, utils.JsonEncoder)
        # 是否提供第四个参数
        # 如果提供了第四个参数, 则是一个 jsonp callback 调用
        if len(values) == 4:
            return '%s(%s)' % (values[3], data)

        return data
Beispiel #10
0
    def serialize2db(self, include_keys=None):
        "序列化任务实体为单层词典"
        result = {}
        for k, v in self.iteritems():
            if include_keys and k not in include_keys:
                continue

            if k in ('type', 'type_id', 'status'):
                v = v.value
            elif isinstance(v, (
                    dict,
                    storage,
                    list,
                    tuple,
            )):
                v = utils.json_dumps(v)

            result[k] = v

        return result
Beispiel #11
0
 def update_splitfiles(video_id, split_files):
     "更新视频的split_files字段"
     return db.manager.master_media.update('video',
                                           split_files = utils.json_dumps(split_files),
                                           where = 'id = $video_id',
                                           vars = locals())
Beispiel #12
0
 def update_thumbnails(video_id, thumbnails):
     "更新视频的thumbnails字段"
     return db.manager.master_media.update('video',
                                           thumbnails=utils.json_dumps(thumbnails),
                                           where='id = $video_id',
                                           vars=locals())
Beispiel #13
0
 def set_json(self, name, value, seconds=0):
     return self.set(name, utils.json_dumps(value, utils.JsonEncoder),
                     seconds)
Beispiel #14
0
    def insert(self, return_key='id', return_attr='id'):
        Session.add(self)
        Session.merge(self)

        return json_dumps({return_key: getattr(self, return_attr)})