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
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)
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())
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)
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), }])
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
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()'))
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
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
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
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())
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())
def set_json(self, name, value, seconds=0): return self.set(name, utils.json_dumps(value, utils.JsonEncoder), seconds)
def insert(self, return_key='id', return_attr='id'): Session.add(self) Session.merge(self) return json_dumps({return_key: getattr(self, return_attr)})