class OriginalContext(BaseContext): """ 这是一个储存原始数据的Mongo集合 以受信人为文档标识 每一组数据包含: 1.数据源直接返回的查询结果 2.请求数据源用到的参数 3.查询时间 储存模式:永久 """ def __init__(self, apply_id, **kwargs): super(OriginalContext, self).__init__(apply_id, **kwargs) self.original_base = MongoBase(collection_name=ORIGINAL_BASE_NAME) self.cache_base = MongoBase(collection_name=CACHE_BASE_NAME) def save(self): """save kwargs to backend""" query = {'apply_id': self.apply_id} original_info = self.original_base.search(query=query) self.kwargs.update(query) if original_info: self.original_base.update(query=query, data=self.kwargs) # self.cache_base.save(self.kwargs) else: self.original_base.save(self.kwargs)
class ProcessContext(BaseContext): """ 这是一个特征数据的Mongo集合 以受信人为文档标识 每一组数据包含: 1.特征计算的结果 2.计算特征用到的参数和方法编号 3.生成时间 储存模式:永久 """ def __init__(self, apply_id, **kwargs): super(ProcessContext, self).__init__(apply_id, **kwargs) self.process_base = MongoBase(collection_name=PROCESS_BASE_NAME) def save(self): """save kwargs to backend""" query = {'apply_id': self.apply_id, 'is_delete': False} original_info = self.process_base.search(query=query) self.kwargs.update(query) if original_info: self.process_base.update(query=query, data=self.kwargs) else: self.process_base.save(self.kwargs)
class ArgsContext(BaseContext): """ """ def __init__(self, apply_id, **kwargs): super(ArgsContext, self).__init__(apply_id, **kwargs) self.args_base = MongoBase(collection_name=BASE_ARGS_NAME) self.arguments = {} # self.cache_base = MongoBase(collection_name=CACHE_BASE_NAME) def load(self): query = {'apply_id': self.apply_id} data = self.args_base.search(query) return data def save(self): """save kwargs to backend""" query = {'apply_id': self.apply_id, 'is_delete': False} original_info = self.args_base.search(query=query) self.kwargs.update(query) if original_info: self.args_base.update(query=query, data=self.kwargs) else: self.args_base.save(self.kwargs) def get(self, key): value = self.kwargs.get(key, None) if value: return value else: return (self.load()).get(key, None) def reload(self): self.arguments = {} apply_data = ApplyContext(self.apply_id).load() portrait_data = {} if cons.IS_PORTRAIT_BASE: proposer_id = apply_data.get('proposer_id', None) if not proposer_id: logger.error( "Don't find proposer_id in apply_data,apply_id:%s" % self.apply_id) raise ProposerIdMissing portrait_data = PortraitContext(proposer_id).load() if not portrait_data: logger.error( "Portrait_data is null in apply_data,proposer_id:%s apply_id:%s" % (proposer_id, self.apply_id)) raise NoPortraitData pre_conf = PreFieldInfo.objects.filter(is_delete=False) full_data = {'apply_data': apply_data, 'portrait_data': portrait_data} for pre in pre_conf: self.arguments.update({ pre.field_name: self.get_value(full_data[pre.source], pre.path) }) self.kwargs.update(self.arguments) self.save() @staticmethod def get_value(data, path): path_expr = parse(path) temp = path_expr.find(data) result = [] for val in temp: result.append(val.value) if result: return result[0] else: return None