def build_delegate_subscription_data() -> DelegateSubscriptionData: return DelegateSubscriptionData( project_id=5, time_window=timedelta(minutes=500), resolution=timedelta(minutes=1), conditions=[["platform", "IN", ["a"]]], aggregations=[["count()", "", "count"]], query="MATCH events SELECT count() WHERE in(platform, 'a')", )
def decode(self, value: bytes) -> SubscriptionData: try: data = json.loads(value.decode("utf-8")) except json.JSONDecodeError: raise InvalidQueryException("Invalid JSON") subscription_type = data.get(SubscriptionData.TYPE_FIELD) if subscription_type == SubscriptionType.SNQL.value: return SnQLSubscriptionData.from_dict(data) elif subscription_type == SubscriptionType.DELEGATE.value: return DelegateSubscriptionData.from_dict(data) elif subscription_type is None: return LegacySubscriptionData.from_dict(data) else: raise InvalidSubscriptionError("Invalid subscription data")
"WHERE " "platform IN tuple('a')" ), time_window=timedelta(minutes=10), resolution=timedelta(minutes=1), ), id="SnQL subscription", ), pytest.param( DelegateSubscriptionData( project_id=123, conditions=[["platform", "IN", ["a"]]], aggregations=[["count()", "", "count"]], query=( "MATCH (events) " "SELECT count() AS count " "WHERE " "platform IN tuple('a')" ), time_window=timedelta(minutes=10), resolution=timedelta(minutes=1), ), id="Delegate subscription", ), ] TESTS_INVALID = [ pytest.param( LegacySubscriptionData( project_id=123, conditions=[["platfo", "IN", ["a"]]],
project_id=1, conditions=[], aggregations=[["count()", "", "count"]], time_window=timedelta(minutes=60), resolution=timedelta(minutes=1), ), SnQLSubscriptionData( project_id=1, query=("MATCH (events) SELECT count() AS count"), time_window=timedelta(minutes=60), resolution=timedelta(minutes=1), ), DelegateSubscriptionData( project_id=1, conditions=[], aggregations=[["count()", "", "count"]], query=("MATCH (events) SELECT count() AS count"), time_window=timedelta(minutes=60), resolution=timedelta(minutes=1), ), ], ) def subscription_data(request: Any) -> SubscriptionData: assert isinstance(request.param, SubscriptionData) return request.param @pytest.fixture def subscription_rollout() -> Generator[None, None, None]: state.set_config("snql_subscription_rollout_pct", 1.0) yield state.set_config("snql_subscription_rollout", 0.0)