Skip to content

Commit 870f5d1

Browse files
committed
feat: Add prefix filter in list exp
1 parent 8fc501b commit 870f5d1

File tree

23 files changed

+207
-18
lines changed

23 files changed

+207
-18
lines changed

clients/haskell/sdk/Io/Superposition/Model/ListExperimentInput.hs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ module Io.Superposition.Model.ListExperimentInput (
1616
setSortBy,
1717
setGlobalExperimentsOnly,
1818
setDimensionMatchStrategy,
19+
setPrefix,
1920
setContext,
2021
build,
2122
ListExperimentInputBuilder,
@@ -37,6 +38,7 @@ module Io.Superposition.Model.ListExperimentInput (
3738
sort_by,
3839
global_experiments_only,
3940
dimension_match_strategy,
41+
prefix,
4042
context
4143
) where
4244
import qualified Control.Applicative
@@ -77,6 +79,7 @@ data ListExperimentInput = ListExperimentInput {
7779
sort_by :: Data.Maybe.Maybe Io.Superposition.Model.SortBy.SortBy,
7880
global_experiments_only :: Data.Maybe.Maybe Bool,
7981
dimension_match_strategy :: Data.Maybe.Maybe Io.Superposition.Model.DimensionMatchStrategy.DimensionMatchStrategy,
82+
prefix :: Data.Maybe.Maybe ([] Data.Text.Text),
8083
context :: Data.Maybe.Maybe (Data.Map.Map Data.Text.Text Data.Aeson.Value)
8184
} deriving (
8285
GHC.Show.Show,
@@ -103,6 +106,7 @@ instance Data.Aeson.ToJSON ListExperimentInput where
103106
"sort_by" Data.Aeson..= sort_by a,
104107
"global_experiments_only" Data.Aeson..= global_experiments_only a,
105108
"dimension_match_strategy" Data.Aeson..= dimension_match_strategy a,
109+
"prefix" Data.Aeson..= prefix a,
106110
"context" Data.Aeson..= context a
107111
]
108112

@@ -128,6 +132,7 @@ instance Data.Aeson.FromJSON ListExperimentInput where
128132
Control.Applicative.<*> (v Data.Aeson..:? "sort_by")
129133
Control.Applicative.<*> (v Data.Aeson..:? "global_experiments_only")
130134
Control.Applicative.<*> (v Data.Aeson..:? "dimension_match_strategy")
135+
Control.Applicative.<*> (v Data.Aeson..:? "prefix")
131136
Control.Applicative.<*> (v Data.Aeson..:? "context")
132137

133138

@@ -151,6 +156,7 @@ data ListExperimentInputBuilderState = ListExperimentInputBuilderState {
151156
sort_byBuilderState :: Data.Maybe.Maybe Io.Superposition.Model.SortBy.SortBy,
152157
global_experiments_onlyBuilderState :: Data.Maybe.Maybe Bool,
153158
dimension_match_strategyBuilderState :: Data.Maybe.Maybe Io.Superposition.Model.DimensionMatchStrategy.DimensionMatchStrategy,
159+
prefixBuilderState :: Data.Maybe.Maybe ([] Data.Text.Text),
154160
contextBuilderState :: Data.Maybe.Maybe (Data.Map.Map Data.Text.Text Data.Aeson.Value)
155161
} deriving (
156162
GHC.Generics.Generic
@@ -175,6 +181,7 @@ defaultBuilderState = ListExperimentInputBuilderState {
175181
sort_byBuilderState = Data.Maybe.Nothing,
176182
global_experiments_onlyBuilderState = Data.Maybe.Nothing,
177183
dimension_match_strategyBuilderState = Data.Maybe.Nothing,
184+
prefixBuilderState = Data.Maybe.Nothing,
178185
contextBuilderState = Data.Maybe.Nothing
179186
}
180187

@@ -248,6 +255,10 @@ setDimensionMatchStrategy :: Data.Maybe.Maybe Io.Superposition.Model.DimensionMa
248255
setDimensionMatchStrategy value =
249256
Control.Monad.State.Strict.modify (\s -> (s { dimension_match_strategyBuilderState = value }))
250257

258+
setPrefix :: Data.Maybe.Maybe ([] Data.Text.Text) -> ListExperimentInputBuilder ()
259+
setPrefix value =
260+
Control.Monad.State.Strict.modify (\s -> (s { prefixBuilderState = value }))
261+
251262
setContext :: Data.Maybe.Maybe (Data.Map.Map Data.Text.Text Data.Aeson.Value) -> ListExperimentInputBuilder ()
252263
setContext value =
253264
Control.Monad.State.Strict.modify (\s -> (s { contextBuilderState = value }))
@@ -272,6 +283,7 @@ build builder = do
272283
sort_by' <- Data.Either.Right (sort_byBuilderState st)
273284
global_experiments_only' <- Data.Either.Right (global_experiments_onlyBuilderState st)
274285
dimension_match_strategy' <- Data.Either.Right (dimension_match_strategyBuilderState st)
286+
prefix' <- Data.Either.Right (prefixBuilderState st)
275287
context' <- Data.Either.Right (contextBuilderState st)
276288
Data.Either.Right (ListExperimentInput {
277289
count = count',
@@ -291,6 +303,7 @@ build builder = do
291303
sort_by = sort_by',
292304
global_experiments_only = global_experiments_only',
293305
dimension_match_strategy = dimension_match_strategy',
306+
prefix = prefix',
294307
context = context'
295308
})
296309

@@ -305,6 +318,7 @@ instance Io.Superposition.Utility.IntoRequestBuilder ListExperimentInput where
305318
Io.Superposition.Utility.serQuery "all" (all' self)
306319
Io.Superposition.Utility.serQuery "experiment_name" (experiment_name self)
307320
Io.Superposition.Utility.serQuery "from_date" (from_date self)
321+
Io.Superposition.Utility.serQuery "prefix" (prefix self)
308322
Io.Superposition.Utility.serQuery "count" (count self)
309323
Io.Superposition.Utility.serQuery "experiment_ids" (experiment_ids self)
310324
Io.Superposition.Utility.serQuery "global_experiments_only" (global_experiments_only self)

clients/java/sdk/src/main/java/io/juspay/superposition/client/SuperpositionAsyncClient.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1799,12 +1799,12 @@ final class Builder extends Client.Builder<SuperpositionAsyncClient, Builder> {
17991799
Node.objectNode()
18001800
);
18011801

1802-
private static final HttpBasicAuthTrait httpBasicAuthScheme = new HttpBasicAuthTrait();
1803-
private static final AuthSchemeFactory<HttpBasicAuthTrait> httpBasicAuthSchemeFactory = new HttpBasicAuthAuthScheme.Factory();
1804-
18051802
private static final HttpBearerAuthTrait httpBearerAuthScheme = new HttpBearerAuthTrait();
18061803
private static final AuthSchemeFactory<HttpBearerAuthTrait> httpBearerAuthSchemeFactory = new HttpBearerAuthScheme.Factory();
18071804

1805+
private static final HttpBasicAuthTrait httpBasicAuthScheme = new HttpBasicAuthTrait();
1806+
private static final AuthSchemeFactory<HttpBasicAuthTrait> httpBasicAuthSchemeFactory = new HttpBasicAuthAuthScheme.Factory();
1807+
18081808
private Builder() {
18091809
configBuilder().putSupportedAuthSchemes(httpBasicAuthSchemeFactory.createAuthScheme(httpBasicAuthScheme), httpBearerAuthSchemeFactory.createAuthScheme(httpBearerAuthScheme));
18101810
}

clients/java/sdk/src/main/java/io/juspay/superposition/client/SuperpositionAsyncClientImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,8 +269,8 @@
269269
@SmithyGenerated
270270
final class SuperpositionAsyncClientImpl extends Client implements SuperpositionAsyncClient {
271271
private static final TypeRegistry TYPE_REGISTRY = TypeRegistry.builder()
272-
.putType(AccessDeniedException.$ID, AccessDeniedException.class, AccessDeniedException::builder)
273272
.putType(ValidationException.$ID, ValidationException.class, ValidationException::builder)
273+
.putType(AccessDeniedException.$ID, AccessDeniedException.class, AccessDeniedException::builder)
274274
.putType(NotAuthorizedException.$ID, NotAuthorizedException.class, NotAuthorizedException::builder)
275275
.putType(InternalFailureException.$ID, InternalFailureException.class, InternalFailureException::builder)
276276
.putType(UnknownOperationException.$ID, UnknownOperationException.class, UnknownOperationException::builder)

clients/java/sdk/src/main/java/io/juspay/superposition/client/SuperpositionClient.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1798,12 +1798,12 @@ final class Builder extends Client.Builder<SuperpositionClient, Builder> {
17981798
Node.objectNode()
17991799
);
18001800

1801-
private static final HttpBasicAuthTrait httpBasicAuthScheme = new HttpBasicAuthTrait();
1802-
private static final AuthSchemeFactory<HttpBasicAuthTrait> httpBasicAuthSchemeFactory = new HttpBasicAuthAuthScheme.Factory();
1803-
18041801
private static final HttpBearerAuthTrait httpBearerAuthScheme = new HttpBearerAuthTrait();
18051802
private static final AuthSchemeFactory<HttpBearerAuthTrait> httpBearerAuthSchemeFactory = new HttpBearerAuthScheme.Factory();
18061803

1804+
private static final HttpBasicAuthTrait httpBasicAuthScheme = new HttpBasicAuthTrait();
1805+
private static final AuthSchemeFactory<HttpBasicAuthTrait> httpBasicAuthSchemeFactory = new HttpBasicAuthAuthScheme.Factory();
1806+
18071807
private Builder() {
18081808
configBuilder().putSupportedAuthSchemes(httpBasicAuthSchemeFactory.createAuthScheme(httpBasicAuthScheme), httpBearerAuthSchemeFactory.createAuthScheme(httpBearerAuthScheme));
18091809
}

clients/java/sdk/src/main/java/io/juspay/superposition/client/SuperpositionClientImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -269,8 +269,8 @@
269269
@SmithyGenerated
270270
final class SuperpositionClientImpl extends Client implements SuperpositionClient {
271271
private static final TypeRegistry TYPE_REGISTRY = TypeRegistry.builder()
272-
.putType(AccessDeniedException.$ID, AccessDeniedException.class, AccessDeniedException::builder)
273272
.putType(ValidationException.$ID, ValidationException.class, ValidationException::builder)
273+
.putType(AccessDeniedException.$ID, AccessDeniedException.class, AccessDeniedException::builder)
274274
.putType(NotAuthorizedException.$ID, NotAuthorizedException.class, NotAuthorizedException::builder)
275275
.putType(InternalFailureException.$ID, InternalFailureException.class, InternalFailureException::builder)
276276
.putType(UnknownOperationException.$ID, UnknownOperationException.class, UnknownOperationException::builder)

clients/java/sdk/src/main/java/io/juspay/superposition/model/ListExperimentInput.java

Lines changed: 37 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,8 @@ public final class ListExperimentInput implements SerializableStruct {
6363
new HttpQueryTrait("global_experiments_only"))
6464
.putMember("dimension_match_strategy", DimensionMatchStrategy.$SCHEMA,
6565
new HttpQueryTrait("dimension_match_strategy"))
66+
.putMember("prefix", SharedSchemas.STRING_LIST,
67+
new HttpQueryTrait("prefix"))
6668
.putMember("context", SharedSchemas.CONTEXT_MAP)
6769
.build();
6870

@@ -83,6 +85,7 @@ public final class ListExperimentInput implements SerializableStruct {
8385
private static final Schema $SCHEMA_SORT_BY = $SCHEMA.member("sort_by");
8486
private static final Schema $SCHEMA_GLOBAL_EXPERIMENTS_ONLY = $SCHEMA.member("global_experiments_only");
8587
private static final Schema $SCHEMA_DIMENSION_MATCH_STRATEGY = $SCHEMA.member("dimension_match_strategy");
88+
private static final Schema $SCHEMA_PREFIX = $SCHEMA.member("prefix");
8689
private static final Schema $SCHEMA_CONTEXT = $SCHEMA.member("context");
8790

8891
private final transient Integer count;
@@ -102,6 +105,7 @@ public final class ListExperimentInput implements SerializableStruct {
102105
private final transient SortBy sortBy;
103106
private final transient Boolean globalExperimentsOnly;
104107
private final transient DimensionMatchStrategy dimensionMatchStrategy;
108+
private final transient List<String> prefix;
105109
private final transient Map<String, Document> context;
106110

107111
private ListExperimentInput(Builder builder) {
@@ -122,6 +126,7 @@ private ListExperimentInput(Builder builder) {
122126
this.sortBy = builder.sortBy;
123127
this.globalExperimentsOnly = builder.globalExperimentsOnly;
124128
this.dimensionMatchStrategy = builder.dimensionMatchStrategy;
129+
this.prefix = builder.prefix == null ? null : Collections.unmodifiableList(builder.prefix);
125130
this.context = builder.context == null ? null : Collections.unmodifiableMap(builder.context);
126131
}
127132

@@ -235,6 +240,17 @@ public DimensionMatchStrategy dimensionMatchStrategy() {
235240
return dimensionMatchStrategy;
236241
}
237242

243+
public List<String> prefix() {
244+
if (prefix == null) {
245+
return Collections.emptyList();
246+
}
247+
return prefix;
248+
}
249+
250+
public boolean hasPrefix() {
251+
return prefix != null;
252+
}
253+
238254
public Map<String, Document> context() {
239255
if (context == null) {
240256
return Collections.emptyMap();
@@ -277,12 +293,13 @@ public boolean equals(Object other) {
277293
&& Objects.equals(this.sortBy, that.sortBy)
278294
&& Objects.equals(this.globalExperimentsOnly, that.globalExperimentsOnly)
279295
&& Objects.equals(this.dimensionMatchStrategy, that.dimensionMatchStrategy)
296+
&& Objects.equals(this.prefix, that.prefix)
280297
&& Objects.equals(this.context, that.context);
281298
}
282299

283300
@Override
284301
public int hashCode() {
285-
return Objects.hash(count, page, all, workspaceId, orgId, ifModifiedSince, status, fromDate, toDate, experimentName, experimentIds, experimentGroupIds, createdBy, sortOn, sortBy, globalExperimentsOnly, dimensionMatchStrategy, context);
302+
return Objects.hash(count, page, all, workspaceId, orgId, ifModifiedSince, status, fromDate, toDate, experimentName, experimentIds, experimentGroupIds, createdBy, sortOn, sortBy, globalExperimentsOnly, dimensionMatchStrategy, prefix, context);
286303
}
287304

288305
@Override
@@ -339,6 +356,9 @@ public void serializeMembers(ShapeSerializer serializer) {
339356
if (dimensionMatchStrategy != null) {
340357
serializer.writeString($SCHEMA_DIMENSION_MATCH_STRATEGY, dimensionMatchStrategy.value());
341358
}
359+
if (prefix != null) {
360+
serializer.writeList($SCHEMA_PREFIX, prefix, prefix.size(), SharedSerde.StringListSerializer.INSTANCE);
361+
}
342362
if (context != null) {
343363
serializer.writeMap($SCHEMA_CONTEXT, context, context.size(), SharedSerde.ContextMapSerializer.INSTANCE);
344364
}
@@ -365,7 +385,8 @@ public <T> T getMemberValue(Schema member) {
365385
case 14 -> (T) SchemaUtils.validateSameMember($SCHEMA_SORT_BY, member, sortBy);
366386
case 15 -> (T) SchemaUtils.validateSameMember($SCHEMA_GLOBAL_EXPERIMENTS_ONLY, member, globalExperimentsOnly);
367387
case 16 -> (T) SchemaUtils.validateSameMember($SCHEMA_DIMENSION_MATCH_STRATEGY, member, dimensionMatchStrategy);
368-
case 17 -> (T) SchemaUtils.validateSameMember($SCHEMA_CONTEXT, member, context);
388+
case 17 -> (T) SchemaUtils.validateSameMember($SCHEMA_PREFIX, member, prefix);
389+
case 18 -> (T) SchemaUtils.validateSameMember($SCHEMA_CONTEXT, member, context);
369390
default -> throw new IllegalArgumentException("Attempted to get non-existent member: " + member.id());
370391
};
371392
}
@@ -396,6 +417,7 @@ public Builder toBuilder() {
396417
builder.sortBy(this.sortBy);
397418
builder.globalExperimentsOnly(this.globalExperimentsOnly);
398419
builder.dimensionMatchStrategy(this.dimensionMatchStrategy);
420+
builder.prefix(this.prefix);
399421
builder.context(this.context);
400422
return builder;
401423
}
@@ -429,6 +451,7 @@ public static final class Builder implements ShapeBuilder<ListExperimentInput> {
429451
private SortBy sortBy;
430452
private Boolean globalExperimentsOnly;
431453
private DimensionMatchStrategy dimensionMatchStrategy;
454+
private List<String> prefix;
432455
private Map<String, Document> context;
433456

434457
private Builder() {}
@@ -588,6 +611,14 @@ public Builder dimensionMatchStrategy(DimensionMatchStrategy dimensionMatchStrat
588611
return this;
589612
}
590613

614+
/**
615+
* @return this builder.
616+
*/
617+
public Builder prefix(List<String> prefix) {
618+
this.prefix = prefix;
619+
return this;
620+
}
621+
591622
/**
592623
* @return this builder.
593624
*/
@@ -623,7 +654,8 @@ public void setMemberValue(Schema member, Object value) {
623654
case 14 -> sortBy((SortBy) SchemaUtils.validateSameMember($SCHEMA_SORT_BY, member, value));
624655
case 15 -> globalExperimentsOnly((boolean) SchemaUtils.validateSameMember($SCHEMA_GLOBAL_EXPERIMENTS_ONLY, member, value));
625656
case 16 -> dimensionMatchStrategy((DimensionMatchStrategy) SchemaUtils.validateSameMember($SCHEMA_DIMENSION_MATCH_STRATEGY, member, value));
626-
case 17 -> context((Map<String, Document>) SchemaUtils.validateSameMember($SCHEMA_CONTEXT, member, value));
657+
case 17 -> prefix((List<String>) SchemaUtils.validateSameMember($SCHEMA_PREFIX, member, value));
658+
case 18 -> context((Map<String, Document>) SchemaUtils.validateSameMember($SCHEMA_CONTEXT, member, value));
627659
default -> ShapeBuilder.super.setMemberValue(member, value);
628660
}
629661
}
@@ -677,7 +709,8 @@ public void accept(Builder builder, Schema member, ShapeDeserializer de) {
677709
case 14 -> builder.sortBy(SortBy.builder().deserializeMember(de, member).build());
678710
case 15 -> builder.globalExperimentsOnly(de.readBoolean(member));
679711
case 16 -> builder.dimensionMatchStrategy(DimensionMatchStrategy.builder().deserializeMember(de, member).build());
680-
case 17 -> builder.context(SharedSerde.deserializeContextMap(member, de));
712+
case 17 -> builder.prefix(SharedSerde.deserializeStringList(member, de));
713+
case 18 -> builder.context(SharedSerde.deserializeContextMap(member, de));
681714
default -> throw new IllegalArgumentException("Unexpected member: " + member.memberName());
682715
}
683716
}

clients/javascript/sdk/src/commands/ListExperimentCommand.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,9 @@ export interface ListExperimentCommandOutput extends ListExperimentOutput, __Met
6868
* sort_by: "desc" || "asc",
6969
* global_experiments_only: true || false,
7070
* dimension_match_strategy: "exact" || "subset",
71+
* prefix: [
72+
* "STRING_VALUE",
73+
* ],
7174
* context: { // ContextMap
7275
* "<keys>": "DOCUMENT_VALUE",
7376
* },

clients/javascript/sdk/src/models/models_0.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2099,6 +2099,7 @@ export interface ListExperimentInput {
20992099
*/
21002100
dimension_match_strategy?: DimensionMatchStrategy | undefined;
21012101

2102+
prefix?: (string)[] | undefined;
21022103
/**
21032104
* Map representing the context.
21042105
* Keys correspond to the names of the dimensions.

clients/javascript/sdk/src/protocols/Aws_restJson1.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1711,6 +1711,7 @@ export const se_ListExperimentCommand = async(
17111711
[_sb]: [,input[_sb]!],
17121712
[_geo]: [() => input.global_experiments_only !== void 0, () => (input[_geo]!.toString())],
17131713
[_dms]: [,input[_dms]!],
1714+
[_p]: [() => input.prefix !== void 0, () => ((input[_p]! || []))],
17141715
});
17151716
let body: any;
17161717
body = JSON.stringify(take(input, {

clients/python/sdk/superposition_sdk/_private/schemas.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10922,9 +10922,19 @@
1092210922
],
1092310923
},
1092410924

10925+
"prefix": {
10926+
"target": STRING_LIST,
10927+
"index": 17,
10928+
"traits": [
10929+
Trait.new(id=ShapeID("smithy.api#notProperty")),
10930+
Trait.new(id=ShapeID("smithy.api#httpQuery"), value="prefix"),
10931+
10932+
],
10933+
},
10934+
1092510935
"context": {
1092610936
"target": CONTEXT_MAP,
10927-
"index": 17,
10937+
"index": 18,
1092810938
"traits": [
1092910939
Trait.new(id=ShapeID("smithy.api#notProperty")),
1093010940

0 commit comments

Comments
 (0)