Exemplo n.º 1
0
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)
Exemplo n.º 2
0
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)
Exemplo n.º 3
0
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