Skip to content

Commit fab4226

Browse files
authored
#patch Allow unscoped filtering on all NamedEntity(Metadata) fields (flyteorg#124)
* allow unscoped filtering for all named entity/metadata fields * add comment * adding test for entity replacement
1 parent 581d63d commit fab4226

File tree

6 files changed

+33
-3
lines changed

6 files changed

+33
-3
lines changed

pkg/common/entity.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ const (
1414
Task = "t"
1515
TaskExecution = "te"
1616
Workflow = "w"
17+
NamedEntity = "nen"
1718
NamedEntityMetadata = "nem"
1819
)
1920

pkg/common/filters.go

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,11 @@ var executionIdentifierFields = map[string]bool{
7979
"name": true,
8080
}
8181

82+
var entityMetadataFields = map[string]bool{
83+
"description": true,
84+
"state": true,
85+
}
86+
8287
const unrecognizedFilterFunction = "unrecognized filter function: %s"
8388
const unsupportedFilterExpression = "unsupported filter expression: %s"
8489
const invalidSingleValueFilter = "invalid single value filter expression: %s"
@@ -235,14 +240,24 @@ func customizeField(field string, entity Entity) string {
235240
return field
236241
}
237242

243+
func customizeEntity(field string, entity Entity) Entity {
244+
// NamedEntity is considered a single object, but the metdata
245+
// is stored using a different entity type.
246+
if entity == NamedEntity && entityMetadataFields[field] {
247+
return NamedEntityMetadata
248+
}
249+
return entity
250+
}
251+
238252
// Returns a filter which uses a single argument value.
239253
func NewSingleValueFilter(entity Entity, function FilterExpression, field string, value interface{}) (InlineFilter, error) {
240254
if _, ok := singleValueFilters[function]; !ok {
241255
return nil, GetInvalidSingleValueFilterErr(function)
242256
}
243257
customizedField := customizeField(field, entity)
258+
customizedEntity := customizeEntity(field, entity)
244259
return &inlineFilterImpl{
245-
entity: entity,
260+
entity: customizedEntity,
246261
function: function,
247262
field: customizedField,
248263
value: value,

pkg/common/filters_test.go

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ func TestNewSingleBoolValueFilter(t *testing.T) {
4848
assert.Equal(t, expression.Args, true)
4949
}
5050

51-
func TestNewSingleValueCustomizedFilter(t *testing.T) {
51+
func TestNewSingleValueCustomizedFieldFilter(t *testing.T) {
5252
filter, err := NewSingleValueFilter(Execution, Equal, "project", "a project")
5353
assert.NoError(t, err)
5454

@@ -61,6 +61,18 @@ func TestNewSingleValueCustomizedFilter(t *testing.T) {
6161
assert.Equal(t, "node_executions.execution_project = ?", expression.Query)
6262
}
6363

64+
func TestNewSingleValueCustomizedEntityFilter(t *testing.T) {
65+
filter, err := NewSingleValueFilter(NamedEntity, Equal, "state", 1)
66+
assert.NoError(t, err)
67+
68+
assert.Equal(t, NamedEntityMetadata, filter.GetEntity())
69+
70+
filter, err = NewSingleValueFilter(NamedEntity, Equal, "description", "test value")
71+
assert.NoError(t, err)
72+
73+
assert.Equal(t, NamedEntityMetadata, filter.GetEntity())
74+
}
75+
6476
func TestNewRepeatedValueFilter(t *testing.T) {
6577
vals := []string{"SuperAwesomeProject", "AnotherAwesomeProject"}
6678
filter, err := NewRepeatedValueFilter(Workflow, ValueIn, "project", vals)

pkg/manager/impl/named_entity_manager.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,7 @@ func (m *NamedEntityManager) getQueryFilters(referenceEntity core.ResourceType,
8686
if len(requestFilters) == 0 {
8787
return filters, nil
8888
}
89-
additionalFilters, err := util.ParseFilters(requestFilters, common.NamedEntityMetadata)
89+
additionalFilters, err := util.ParseFilters(requestFilters, common.NamedEntity)
9090
if err != nil {
9191
return nil, err
9292
}

pkg/manager/impl/util/filters.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ var filterFieldEntityPrefix = map[string]common.Entity{
5858
"execution": common.Execution,
5959
"node_execution": common.NodeExecution,
6060
"task_execution": common.TaskExecution,
61+
"entities": common.NamedEntity,
6162
"named_entity_metadata": common.NamedEntityMetadata,
6263
}
6364

pkg/repositories/gormimpl/common.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ var entityToTableName = map[common.Entity]string{
4545
common.Task: "tasks",
4646
common.TaskExecution: "task_executions",
4747
common.Workflow: "workflows",
48+
common.NamedEntity: "entities",
4849
common.NamedEntityMetadata: "named_entity_metadata",
4950
}
5051

0 commit comments

Comments
 (0)