Skip to content

Commit bea6f21

Browse files
authored
Allow dash in project name (#19)
Signed-off-by: Terence Lim <terencelimxp@gmail.com>
1 parent 8e5bad7 commit bea6f21

File tree

3 files changed

+19
-15
lines changed

3 files changed

+19
-15
lines changed

core/src/main/java/feast/core/service/SpecService.java

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
package feast.core.service;
1818

1919
import static feast.core.validators.Matchers.checkValidCharacters;
20-
import static feast.core.validators.Matchers.checkValidCharactersAllowAsterisk;
20+
import static feast.core.validators.Matchers.checkValidCharactersAllowDash;
2121

2222
import com.google.protobuf.InvalidProtocolBufferException;
2323
import feast.core.dao.EntityRepository;
@@ -105,7 +105,7 @@ public GetEntityResponse getEntity(GetEntityRequest request) {
105105
projectName = Project.DEFAULT_NAME;
106106
}
107107

108-
checkValidCharacters(projectName, "project");
108+
checkValidCharactersAllowDash(projectName, "project");
109109
checkValidCharacters(entityName, "entity");
110110

111111
EntityV2 entity = entityRepository.findEntityByNameAndProject_Name(entityName, projectName);
@@ -143,13 +143,13 @@ public ListFeaturesResponse listFeatures(ListFeaturesRequest.Filter filter) {
143143
List<String> entities = filter.getEntitiesList();
144144
Map<String, String> labels = filter.getLabelsMap();
145145

146-
checkValidCharactersAllowAsterisk(project, "project");
147-
148146
// Autofill default project if project not specified
149147
if (project.isEmpty()) {
150148
project = Project.DEFAULT_NAME;
151149
}
152150

151+
checkValidCharactersAllowDash(project, "project");
152+
153153
// Currently defaults to all FeatureTables
154154
List<FeatureTable> featureTables = tableRepository.findAllByProject_Name(project);
155155

@@ -200,7 +200,7 @@ public ListEntitiesResponse listEntities(ListEntitiesRequest.Filter filter) {
200200
project = Project.DEFAULT_NAME;
201201
}
202202

203-
checkValidCharacters(project, "project");
203+
checkValidCharactersAllowDash(project, "project");
204204

205205
List<EntityV2> entities = entityRepository.findAllByProject_Name(project);
206206

@@ -271,6 +271,8 @@ public ApplyEntityResponse applyEntity(
271271
projectName = Project.DEFAULT_NAME;
272272
}
273273

274+
checkValidCharactersAllowDash(projectName, "project");
275+
274276
// Validate incoming entity
275277
EntityValidator.validateSpec(newEntitySpec);
276278

@@ -368,6 +370,8 @@ public UpdateStoreResponse updateStore(UpdateStoreRequest updateStoreRequest)
368370
public ApplyFeatureTableResponse applyFeatureTable(ApplyFeatureTableRequest request) {
369371
String projectName = resolveProjectName(request.getProject());
370372

373+
checkValidCharactersAllowDash(projectName, "project");
374+
371375
// Check that specification provided is valid
372376
FeatureTableSpec applySpec = request.getTableSpec();
373377
FeatureTableValidator.validateSpec(applySpec);
@@ -411,7 +415,7 @@ public ListFeatureTablesResponse listFeatureTables(ListFeatureTablesRequest.Filt
411415
String projectName = resolveProjectName(filter.getProject());
412416
Map<String, String> labelsFilter = filter.getLabelsMap();
413417

414-
checkValidCharacters(projectName, "project");
418+
checkValidCharactersAllowDash(projectName, "project");
415419

416420
List<FeatureTable> matchingTables = tableRepository.findAllByProject_Name(projectName);
417421

@@ -444,7 +448,7 @@ public GetFeatureTableResponse getFeatureTable(GetFeatureTableRequest request) {
444448
String projectName = resolveProjectName(request.getProject());
445449
String featureTableName = request.getName();
446450

447-
checkValidCharacters(projectName, "project");
451+
checkValidCharactersAllowDash(projectName, "project");
448452
checkValidCharacters(featureTableName, "featureTable");
449453

450454
Optional<FeatureTable> retrieveTable =
@@ -474,7 +478,7 @@ public void deleteFeatureTable(DeleteFeatureTableRequest request) {
474478
String projectName = resolveProjectName(request.getProject());
475479
String featureTableName = request.getName();
476480

477-
checkValidCharacters(projectName, "project");
481+
checkValidCharactersAllowDash(projectName, "project");
478482
checkValidCharacters(featureTableName, "featureTable");
479483

480484
Optional<FeatureTable> existingTable =

core/src/main/java/feast/core/validators/Matchers.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ public class Matchers {
2929
private static Pattern UPPER_SNAKE_CASE_REGEX = Pattern.compile("^[A-Z0-9]+(_[A-Z0-9]+)*$");
3030
private static Pattern LOWER_SNAKE_CASE_REGEX = Pattern.compile("^[a-z0-9]+(_[a-z0-9]+)*$");
3131
private static Pattern VALID_CHARACTERS_REGEX = Pattern.compile("^[a-zA-Z_][a-zA-Z0-9_]*$");
32-
private static Pattern VALID_CHARACTERS_REGEX_WITH_ASTERISK_WILDCARD =
33-
Pattern.compile("^[a-zA-Z0-9\\-_*]*$");
32+
private static Pattern VALID_CHARACTERS_REGEX_WITH_DASH =
33+
Pattern.compile("^[a-zA-Z_][a-zA-Z0-9_-]*$");
3434

3535
private static String ERROR_MESSAGE_TEMPLATE = "invalid value for %s resource, %s: %s";
3636

@@ -70,15 +70,15 @@ public static void checkValidCharacters(String input, String resource)
7070
}
7171
}
7272

73-
public static void checkValidCharactersAllowAsterisk(String input, String resource)
73+
public static void checkValidCharactersAllowDash(String input, String resource)
7474
throws IllegalArgumentException {
75-
if (!VALID_CHARACTERS_REGEX_WITH_ASTERISK_WILDCARD.matcher(input).matches()) {
75+
if (!VALID_CHARACTERS_REGEX_WITH_DASH.matcher(input).matches()) {
7676
throw new IllegalArgumentException(
7777
String.format(
7878
ERROR_MESSAGE_TEMPLATE,
7979
resource,
8080
input,
81-
"argument must only contain alphanumeric characters, dashes, underscores, or an asterisk."));
81+
"argument must only contain alphanumeric characters, dashes, or underscores."));
8282
}
8383
}
8484

core/src/test/java/feast/core/service/SpecServiceIT.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ public void shouldThrowExceptionGivenWildcardProject() {
170170
equalTo(
171171
String.format(
172172
"INVALID_ARGUMENT: invalid value for project resource, %s: "
173-
+ "argument must only contain alphanumeric characters and underscores.",
173+
+ "argument must only contain alphanumeric characters, dashes, or underscores.",
174174
filter.getProject())));
175175
}
176176
}
@@ -226,7 +226,7 @@ public void shouldThrowExceptionGivenWildcardProject() {
226226
equalTo(
227227
String.format(
228228
"INVALID_ARGUMENT: invalid value for project resource, %s: "
229-
+ "argument must only contain alphanumeric characters and underscores.",
229+
+ "argument must only contain alphanumeric characters, dashes, or underscores.",
230230
filter.getProject())));
231231
}
232232
}

0 commit comments

Comments
 (0)