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 PortraitContext(BaseContext):
    """
        这是一个储存受信人预授信的Mongo集合
        以受信人为文档标识
        每一组数据包含:
            受信人预授信的基本数据
            以proposer_id为唯一标识
        储存模式:永久
        """
    def __init__(self, proposer_id, **kwargs):

        self.context_data = None

        super(PortraitContext, self).__init__(proposer_id, **kwargs)
        self.portrait_base = MongoBase(collection_name=PORTRAIT_BASE_NAME)
        # self.cache_base = MongoBase(collection_name=CACHE_BASE_NAME)

    def load(self):
        query = {'proposer_id': self.apply_id, 'is_delete': False}
        data = self.portrait_base.search(query)
        return data

    def get_data(self, key):
        if self.context_data is None:
            self.context_data = self.load()

        return self.context_data.get(key) if self.context_data else None

    def set_data(self, **kwargs):
        if self.context_data is None:
            cache_data = self.load()
            self.context_data = cache_data if cache_data is not None else {}

        self.context_data.update(**kwargs)
Exemplo n.º 3
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.º 4
0
class ApplyContext(BaseContext):
    """
    这是一个储存受信人输入的Mongo集合
    以受信人为文档标识
    每一组数据包含:
        受信人输入的基本数据
    储存模式:永久
    """
    def __init__(self, apply_id, **kwargs):
        super(ApplyContext, self).__init__(apply_id, **kwargs)
        self.apply_base = MongoBase(collection_name=APPLY_BASE_NAME)
        # self.cache_base = MongoBase(collection_name=CACHE_BASE_NAME)

    def load(self):
        query = {'apply_id': self.apply_id, 'is_delete': False}
        logger.info("mongo query: %s" % self.apply_id)
        data = self.apply_base.search(query)
        logger.info("mongo return :%s" % data)
        return data
Exemplo n.º 5
0
 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)
Exemplo n.º 6
0
 def __init__(self, apply_id, **kwargs):
     super(ApplyContext, self).__init__(apply_id, **kwargs)
     self.apply_base = MongoBase(collection_name=APPLY_BASE_NAME)
Exemplo n.º 7
0
 def __init__(self, apply_id, **kwargs):
     super(ArgsContext, self).__init__(apply_id, **kwargs)
     self.args_base = MongoBase(collection_name=BASE_ARGS_NAME)
     self.arguments = {}
Exemplo n.º 8
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
Exemplo n.º 9
0
    def __init__(self, proposer_id, **kwargs):

        self.context_data = None

        super(PortraitContext, self).__init__(proposer_id, **kwargs)
        self.portrait_base = MongoBase(collection_name=PORTRAIT_BASE_NAME)
Exemplo n.º 10
0
 def __init__(self, apply_id, **kwargs):
     super(CacheContext, self).__init__(apply_id, **kwargs)
     self.data_identity = ''
     self.red = RedisX()
     self.cache_base = MongoBase(collection_name=CACHE_BASE_NAME)
Exemplo n.º 11
0
class CacheContext(BaseContext):
    """
    这是一个储存原始数据的Mongo集合
    以受信人为文档标识
    每一组数据包含:
        1.数据源直接返回的查询结果
        2.请求数据源用到的参数
        3.查询时间
    储存模式:缓存模式  时效24h
    """
    def __init__(self, apply_id, **kwargs):
        super(CacheContext, self).__init__(apply_id, **kwargs)
        self.data_identity = ''
        self.red = RedisX()
        self.cache_base = MongoBase(collection_name=CACHE_BASE_NAME)

    def save(self):
        """save kwargs to backend"""
        self.red.ping()
        self.data_identity = self.kwargs.keys()[0]
        insert_id = self.cache_base.save(self.kwargs)
        self.kwargs = {}
        o_id = insert_id.inserted_id
        key = self.apply_id + ':' + self.data_identity
        if not self.red.set(key, o_id):
            raise Exception("redis cache_base %s key error!" % key)
        self.data_identity = ""

    def get(self, key):
        """get value for key"""
        self.red.ping()
        redis_key = self.apply_id + ':' + key
        o_id = self.red.get(redis_key)
        if o_id:
            query = {'_id': ObjectId(o_id)}
            ret = self.cache_base.search(query)
            return ret
        else:
            return None

    def delete_cache(self, key):
        """get value for key"""
        self.red.ping()
        redis_key = self.apply_id + ':' + key
        ret = self.red.delete(redis_key)
        return ret

    def sadd_async(self, value):
        self.red.ping()
        key = self.apply_id + '__data_identity'
        self.red.sadd(key, value)
        self.red.expire(name=key)

    def delete_async(self):
        self.red.ping()
        key = self.apply_id + '__data_identity'
        ret = self.red.delete(key)
        return ret

    def smembers_async(self):
        self.red.ping()
        key = self.apply_id + '__data_identity'
        ret = self.red.smembers(key)
        return ret

    def srem_async(self, value):
        self.red.ping()
        key = self.apply_id + '__data_identity'
        ret = self.red.srem(key, value)
        return ret

    def sadd_async_args(self, data_identity, value):
        self.red.ping()
        key = self.apply_id + '__' + data_identity + '__args'
        self.red.sadd(key, value)
        self.red.expire(name=key)

    def smembers_async_args(self, data_identity):
        self.red.ping()
        key = self.apply_id + '__' + data_identity + '__args'
        ret = self.red.smembers(key)
        return ret

    def srem_async_args(self, data_identity, value):
        self.red.ping()
        key = self.apply_id + '__' + data_identity + '__args'
        ret = self.red.srem(key, value)
        return ret
Exemplo n.º 12
0
 def __init__(self, apply_id, **kwargs):
     super(ProcessContext, self).__init__(apply_id, **kwargs)
     self.process_base = MongoBase(collection_name=PROCESS_BASE_NAME)