Exemplo n.º 1
0
    def _execute_stream_bts(
            self,
            identity_events: List[TimeAndRecord],
            identity: str,
            schema_loader: SchemaLoader,
            old_state: Optional[Dict] = None) -> Dict[Key, Any]:
        if self._stream_bts is None:
            return {}

        stream_bts_name = schema_loader.add_schema_spec(self._stream_bts)
        stream_transformer_schema = schema_loader.get_schema_object(
            stream_bts_name)
        store = self._get_store(schema_loader)

        if old_state:
            for k, v in old_state.items():
                store.save(k, v)

        if identity_events:
            stream_transformer = StreamingTransformer(
                stream_transformer_schema, identity)

            for time, event in identity_events:
                stream_transformer.run_evaluate(event)
            stream_transformer.run_finalize()

        return self._get_store(schema_loader).get_all(identity)
Exemplo n.º 2
0
def test_streaming_transformer_evaluate(schema_loader: SchemaLoader,
                                        schema_spec: Dict[str, Any]) -> None:
    streaming_bts = schema_loader.add_schema_spec(schema_spec)
    transformer_schema = StreamingTransformerSchema(streaming_bts, schema_loader)
    transformer = StreamingTransformer(transformer_schema, 'user1')
    transformer.run_evaluate(Record())

    assert transformer._snapshot == {'test_group': {'_identity': 'user1', 'events': 1}}
Exemplo n.º 3
0
def test_streaming_transformer_finalize(schema_loader: SchemaLoader,
                                        schema_spec: Dict[str, Any]) -> None:
    streaming_bts = schema_loader.add_schema_spec(schema_spec)
    transformer_schema = StreamingTransformerSchema(streaming_bts, schema_loader)
    transformer = StreamingTransformer(transformer_schema, 'user1')
    store = schema_loader.get_store('test.memstore')

    transformer.run_finalize()
    assert store.get(Key(KeyType.DIMENSION, 'user1', 'test_group')) is None

    transformer.run_evaluate(Record())
    transformer.run_finalize()
    assert store.get(Key(KeyType.DIMENSION, 'user1', 'test_group')) == {
        '_identity': 'user1',
        'events': 1
    }
Exemplo n.º 4
0
def test_streaming_transformer_evaluate_time_error(schema_loader: SchemaLoader,
                                                   schema_spec: Dict[str, Any]) -> None:
    del schema_spec['Import']
    streaming_bts = schema_loader.add_schema_spec(schema_spec)
    transformer_schema = StreamingTransformerSchema(streaming_bts, schema_loader)
    transformer = StreamingTransformer(transformer_schema, 'user1')
    with pytest.raises(NameError, match='name \'datetime\' is not defined'):
        assert transformer.run_evaluate(Record())
Exemplo n.º 5
0
    def _execute_stream_dtc(self, identity_events: List[Tuple[datetime,
                                                              Record]],
                            identity: str,
                            schema_loader: SchemaLoader) -> Dict[Key, Any]:
        if self._stream_dtc is None:
            return {}

        stream_dtc_name = schema_loader.add_schema_spec(self._stream_dtc)
        stream_transformer_schema = schema_loader.get_schema_object(
            stream_dtc_name)

        stream_transformer = StreamingTransformer(stream_transformer_schema,
                                                  identity)
        for time, event in identity_events:
            stream_transformer.run_evaluate(event)
        stream_transformer.run_finalize()

        return self._get_store(schema_loader).get_all(identity)
Exemplo n.º 6
0
def test_streaming_transformer_evaluate_user_mismatch(schema_loader: SchemaLoader,
                                                      schema_spec: Dict[str, Any]) -> None:
    streaming_bts = schema_loader.add_schema_spec(schema_spec)
    transformer_schema = StreamingTransformerSchema(streaming_bts, schema_loader)
    transformer = StreamingTransformer(transformer_schema, 'user2')
    with pytest.raises(
            IdentityError,
            match='Identity in transformer \(user2\) and new record \(user1\) do not match'):
        assert transformer.run_evaluate(Record())