コード例 #1
0
 def serialize_value(value: Any):
     hook = RedisHook(redis_conn_id=XComRedisBackend.CONN_ID)
     key = str(uuid4())
     # We use the default serializer, which pickles or JSONs
     hook.get_conn().set(key, pickle.dumps(value))
     # Add prefix to make it clear where the value is stored.
     value = XComRedisBackend.PREFIX + key
     return BaseXCom.serialize_value(value)
コード例 #2
0
    def test_get_conn(self):
        hook = RedisHook(redis_conn_id='redis_default')
        self.assertEqual(hook.redis, None)

        self.assertEqual(hook.host, None, 'host initialised as None.')
        self.assertEqual(hook.port, None, 'port initialised as None.')
        self.assertEqual(hook.password, None, 'password initialised as None.')
        self.assertEqual(hook.db, None, 'db initialised as None.')
        self.assertIs(hook.get_conn(), hook.get_conn(), 'Connection initialized only if None.')
コード例 #3
0
    def test_get_conn(self):
        hook = RedisHook(redis_conn_id='redis_default')
        assert hook.redis is None

        assert hook.host is None, 'host initialised as None.'
        assert hook.port is None, 'port initialised as None.'
        assert hook.password is None, 'password initialised as None.'
        assert hook.db is None, 'db initialised as None.'
        assert hook.get_conn() is hook.get_conn(), 'Connection initialized only if None.'
コード例 #4
0
 def serialize_value(value: Any):
     """
     Docstring goes here
     """
     hook = RedisHook()
     hook.get_conn()
     redis = hook.redis
     key = f"data_{uuid.uuid4()}"
     xcom = {key: json.dumps(value)}
     redis.mset(xcom)
     return BaseXCom.serialize_value(key)
コード例 #5
0
 def deserialize_value(result) -> Any:
     """
     Docstring goes here
     """
     result = BaseXCom.deserialize_value(result)
     if isinstance(result, str):
         hook = RedisHook()
         hook.get_conn()
         redis = hook.redis
         xcom = redis.mget(result)
         result = eval(xcom[0])
     return result
コード例 #6
0
 def test_poke(self):
     hook = RedisHook(redis_conn_id='redis_default')
     redis = hook.get_conn()
     redis.set('test_key', 'test_value')
     self.assertTrue(self.sensor.poke(None), "Key exists on first call.")
     redis.delete('test_key')
     self.assertFalse(self.sensor.poke(None), "Key does NOT exists on second call.")
コード例 #7
0
    def test_poke_true(self):
        sensor = RedisPubSubSensor(task_id='test_task',
                                   dag=self.dag,
                                   channels='test',
                                   redis_conn_id='redis_default')

        hook = RedisHook(redis_conn_id='redis_default')
        redis = hook.get_conn()
        redis.publish('test', 'message')

        result = sensor.poke(self.mock_context)
        self.assertFalse(result)
        result = sensor.poke(self.mock_context)
        self.assertTrue(result)
        context_calls = [
            call.xcom_push(key='message',
                           value={
                               'type': 'message',
                               'pattern': None,
                               'channel': b'test',
                               'data': b'message'
                           })
        ]
        self.assertTrue(self.mock_context['ti'].method_calls == context_calls,
                        "context calls should be same")
        result = sensor.poke(self.mock_context)
        self.assertFalse(result)
コード例 #8
0
    def test_execute_hello(self):
        operator = RedisPublishOperator(
            task_id='test_task',
            dag=self.dag,
            message='hello',
            channel=self.channel,
            redis_conn_id='redis_default',
        )

        hook = RedisHook(redis_conn_id='redis_default')
        pubsub = hook.get_conn().pubsub()
        pubsub.subscribe(self.channel)

        operator.execute(self.mock_context)
        context_calls = []
        assert self.mock_context[
            'ti'].method_calls == context_calls, "context calls should be same"

        message = pubsub.get_message()
        assert message['type'] == 'subscribe'

        message = pubsub.get_message()
        assert message['type'] == 'message'
        assert message['data'] == b'hello'

        pubsub.unsubscribe(self.channel)
コード例 #9
0
    def test_real_get_and_set(self):
        hook = RedisHook(redis_conn_id='redis_default')
        redis = hook.get_conn()

        self.assertTrue(redis.set('test_key', 'test_value'), 'Connection to Redis with SET works.')
        self.assertEqual(redis.get('test_key'), b'test_value', 'Connection to Redis with GET works.')
        self.assertEqual(redis.delete('test_key'), 1, 'Connection to Redis with DELETE works.')
コード例 #10
0
    def test_get_conn_with_extra_config(self, mock_get_connection, mock_redis):
        connection = mock_get_connection.return_value
        hook = RedisHook()

        hook.get_conn()
        mock_redis.assert_called_once_with(
            host=connection.host,
            password=connection.password,
            port=connection.port,
            db=connection.extra_dejson["db"],
            ssl=connection.extra_dejson["ssl"],
            ssl_cert_reqs=connection.extra_dejson["ssl_cert_reqs"],
            ssl_ca_certs=connection.extra_dejson["ssl_ca_certs"],
            ssl_keyfile=connection.extra_dejson["ssl_keyfile"],
            ssl_cert_file=connection.extra_dejson["ssl_cert_file"],
            ssl_check_hostname=connection.extra_dejson["ssl_check_hostname"])
コード例 #11
0
 def deserialize_value(result) -> Any:
     result = BaseXCom.deserialize_value(result)
     prefix = XComRedisBackend.PREFIX
     if isinstance(result, str) and result.startswith(prefix):
         key = result.replace(prefix, "")
         hook = RedisHook(redis_conn_id=XComRedisBackend.CONN_ID)
         result = hook.get_conn().get(key)
         result = pickle.loads(result)
     return result
コード例 #12
0
    def execute(self, context: Dict) -> None:
        """
        Publish the message to Redis channel

        :param context: the context object
        :type context: dict
        """
        redis_hook = RedisHook(redis_conn_id=self.redis_conn_id)

        self.log.info('Sending messsage %s to Redis on channel %s', self.message, self.channel)

        result = redis_hook.get_conn().publish(channel=self.channel, message=self.message)

        self.log.info('Result of publishing %s', result)
コード例 #13
0
    def execute(self, context):
        oracle = OracleHelper(self.oracle_conn_id)
        redis = RedisHook(self.redis_conn_id)
        self.log.info(f"Executing SQL:{self.sql}")

        self.log.info("Extracting data from Oracle")
        conn_redis = redis.get_conn()
        records = oracle.get_rows_with_bind(sql=self.sql,
                                            bind=self.dict_bind)

        self.log.info("Inserting rows into Redis")
        pipe = conn_redis.pipeline()
        [pipe.lpush(self.name_redis_key, str(row)) for row in records]
        pipe.execute()
        self.log.info(f"Inserted {len(records)} rows.")
コード例 #14
0
    def test_real_ping(self):
        hook = RedisHook(redis_conn_id='redis_default')
        redis = hook.get_conn()

        self.assertTrue(redis.ping(), 'Connection to Redis with PING works.')
コード例 #15
0
 def test_get_conn_password_stays_none(self):
     hook = RedisHook(redis_conn_id='redis_default')
     hook.get_conn()
     self.assertEqual(hook.password, None)
コード例 #16
0
 def test_get_conn_password_stays_none(self):
     hook = RedisHook(redis_conn_id='redis_default')
     hook.get_conn()
     assert hook.password is None