Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
M
Metabase
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Requirements
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Test cases
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Insights
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
Engineering Digital Service
Metabase
Commits
13a47418
Unverified
Commit
13a47418
authored
2 years ago
by
Ngoc Khuat
Committed by
GitHub
2 years ago
Browse files
Options
Downloads
Patches
Plain Diff
malli error/fn takes 2-arity function (#28024)
parent
718e7235
No related branches found
Branches containing commit
No related tags found
Tags containing commit
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
src/metabase/util/malli/schema.clj
+29
-29
29 additions, 29 deletions
src/metabase/util/malli/schema.clj
with
29 additions
and
29 deletions
src/metabase/util/malli/schema.clj
+
29
−
29
View file @
13a47418
...
...
@@ -21,7 +21,7 @@
...)"
[
model
]
(
mc/schema
[
:fn
{
:error/fn
(
fn
[]
(
deferred-tru
"value must be an instance of {0}"
(
name
model
)))}
[
:fn
{
:error/fn
(
fn
[
_
_
]
(
deferred-tru
"value must be an instance of {0}"
(
name
model
)))}
#
(
models.dispatch/instance-of?
model
%
)]))
;;; -------------------------------------------------- Schemas --------------------------------------------------
...
...
@@ -41,35 +41,35 @@
"Schema representing an integer than must also be greater than zero."
(
mc/schema
[
:int
{
:min
1
:error/fn
(
fn
[]
(
deferred-tru
"value must be an integer greater than zero."
))}]))
:error/fn
(
fn
[
_
_
]
(
deferred-tru
"value must be an integer greater than zero."
))}]))
(
def
PositiveNum
"Schema representing a numeric value greater than zero. This allows floating point numbers and integers."
(
mc/schema
[
pos?
{
:error/fn
(
fn
[]
(
deferred-tru
"value must be a number greater than zero."
))}]))
[
pos?
{
:error/fn
(
fn
[
_
_
]
(
deferred-tru
"value must be a number greater than zero."
))}]))
(
def
KeywordOrString
"Schema for something that can be either a `Keyword` or a `String`."
(
mc/schema
[
:or
{
:error/fn
(
fn
[]
(
deferred-tru
"value must be a keyword or string."
))}
[
:or
{
:error/fn
(
fn
[
_
_
]
(
deferred-tru
"value must be a keyword or string."
))}
:string
:keyword
]))
(
def
FieldType
"Schema for a valid Field base or effective (data) type (does it derive from `:type/*`)?"
(
mc/schema
[
:fn
{
:error/fn
(
fn
[]
(
deferred-tru
"value must be a valid field type."
))}
[
:fn
{
:error/fn
(
fn
[
_
_
]
(
deferred-tru
"value must be a valid field type."
))}
#
(
isa?
%
:type/*
)]))
(
def
FieldSemanticType
"Schema for a valid Field semantic type deriving from `:Semantic/*`."
(
mc/schema
[
:fn
{
:error/fn
(
fn
[]
(
deferred-tru
"value must be a valid field semantic type."
))}
[
:fn
{
:error/fn
(
fn
[
_
_
]
(
deferred-tru
"value must be a valid field semantic type."
))}
#
(
isa?
%
:Semantic/*
)]))
(
def
FieldRelationType
"Schema for a valid Field relation type deriving from `:Relation/*`"
(
mc/schema
[
:fn
{
:error/fn
(
fn
[]
(
deferred-tru
"value must be a valid field relation type."
))}
[
:fn
{
:error/fn
(
fn
[
_
_
]
(
deferred-tru
"value must be a valid field relation type."
))}
#
(
isa?
%
:Relation/*
)]))
(
def
FieldSemanticOrRelationType
...
...
@@ -77,13 +77,13 @@
to store either the semantic type or relation type info. When this is changed in the future we can get rid of this
schema. See #15486."
(
mc/schema
[
:fn
{
:error/fn
(
fn
[]
(
deferred-tru
"value must be a valid field semantic or relation type."
))}
[
:fn
{
:error/fn
(
fn
[
_
_
]
(
deferred-tru
"value must be a valid field semantic or relation type."
))}
(
fn
[
k
]
(
or
(
isa?
k
:Semantic/*
)
(
isa?
k
:Relation/*
)))]))
(
def
CoercionStrategy
"Schema for a valid Field coercion strategy (does it derive from `:Coercion/*`)?"
(
mc/schema
[
:fn
{
:error/fn
(
fn
[]
(
deferred-tru
"value must be a valid coercion strategy."
))}
[
:fn
{
:error/fn
(
fn
[
_
_
]
(
deferred-tru
"value must be a valid coercion strategy."
))}
#
(
isa?
%
:Coercion/*
)]))
(
def
FieldTypeKeywordOrString
...
...
@@ -91,25 +91,25 @@
This is useful especially for validating API input or objects coming out of the DB as it is unlikely
those values will be encoded as keywords at that point."
(
mc/schema
[
:fn
{
:error/fn
(
fn
[]
(
deferred-tru
"value must be a valid field data type (keyword or string)."
))}
[
:fn
{
:error/fn
(
fn
[
_
_
]
(
deferred-tru
"value must be a valid field data type (keyword or string)."
))}
#
(
isa?
(
keyword
%
)
:type/*
)]))
(
def
FieldSemanticTypeKeywordOrString
"Like `FieldSemanticType` but accepts either a keyword or string."
(
mc/schema
[
:fn
{
:error/fn
(
fn
[]
(
deferred-tru
"value must be a valid field semantic type (keyword or string)."
))}
[
:fn
{
:error/fn
(
fn
[
_
_
]
(
deferred-tru
"value must be a valid field semantic type (keyword or string)."
))}
#
(
isa?
(
keyword
%
)
:Semantic/*
)]))
(
def
FieldRelationTypeKeywordOrString
"Like `FieldRelationType` but accepts either a keyword or string."
(
mc/schema
[
:fn
{
:error/fn
(
fn
[]
(
deferred-tru
"value must be a valid field relation type (keyword or string)."
))}
[
:fn
{
:error/fn
(
fn
[
_
_
]
(
deferred-tru
"value must be a valid field relation type (keyword or string)."
))}
#
(
isa?
(
keyword
%
)
:Relation/*
)]))
(
def
FieldSemanticOrRelationTypeKeywordOrString
"Like `FieldSemanticOrRelationType` but accepts either a keyword or string."
(
mc/schema
[
:fn
{
:error/fn
(
fn
[]
(
deferred-tru
"value must be a valid field semantic or relation type (keyword or string)."
))}
[
:fn
{
:error/fn
(
fn
[
_
_
]
(
deferred-tru
"value must be a valid field semantic or relation type (keyword or string)."
))}
(
fn
[
k
]
(
let
[
k
(
keyword
k
)]
(
or
(
isa?
k
:Semantic/*
)
...
...
@@ -118,7 +118,7 @@
(
def
Field
"Schema for a valid Field for API usage."
(
mc/schema
[
:fn
{
:error/fn
(
fn
[]
(
deferred-tru
"value must an array with :field id-or-name and an options map"
))}
[
:fn
{
:error/fn
(
fn
[
_
_
]
(
deferred-tru
"value must an array with :field id-or-name and an options map"
))}
(
fn
[
k
]
((
comp
(
complement
(
s/checker
mbql.s/Field
))
mbql.normalize/normalize-tokens
)
k
))]))
...
...
@@ -126,26 +126,26 @@
(
def
CoercionStrategyKeywordOrString
"Like `CoercionStrategy` but accepts either a keyword or string."
(
mc/schema
[
:fn
{
:error/fn
(
fn
[]
(
deferred-tru
"value must be a valid coercion strategy (keyword or string)."
))}
[
:fn
{
:error/fn
(
fn
[
_
_
]
(
deferred-tru
"value must be a valid coercion strategy (keyword or string)."
))}
#
(
isa?
(
keyword
%
)
:Coercion/*
)]))
(
def
EntityTypeKeywordOrString
"Validates entity type derivatives of `:entity/*`. Allows strings or keywords"
(
mc/schema
[
:fn
{
:error/fn
(
fn
[]
(
deferred-tru
"value must be a valid entity type (keyword or string)."
))}
[
:fn
{
:error/fn
(
fn
[
_
_
]
(
deferred-tru
"value must be a valid entity type (keyword or string)."
))}
#
(
isa?
(
keyword
%
)
:entity/*
)]))
(
def
Map
"Schema for a valid map."
(
mc/schema
[
:map
{
:error/fn
(
fn
[]
(
deferred-tru
"Value must be a map."
))}]))
[
:map
{
:error/fn
(
fn
[
_
_
]
(
deferred-tru
"Value must be a map."
))}]))
(
def
Email
"Schema for a valid email string."
(
mc/schema
[
:and
:string
[
:fn
{
:error/fn
(
fn
[]
(
deferred-tru
"value must be a valid email address."
))}
[
:fn
{
:error/fn
(
fn
[
_
_
]
(
deferred-tru
"value must be a valid email address."
))}
u/email?
]]))
(
def
ValidPassword
...
...
@@ -153,7 +153,7 @@
(
mc/schema
[
:and
:string
[
:fn
{
:error/fn
(
fn
[]
(
deferred-tru
"password is too common."
))}
[
:fn
{
:error/fn
(
fn
[
_
_
]
(
deferred-tru
"password is too common."
))}
u.password/is-valid?
]]))
(
def
IntString
...
...
@@ -162,7 +162,7 @@
(
mc/schema
[
:and
:string
[
:fn
{
:error/fn
(
fn
[]
(
deferred-tru
"value must be a valid integer."
))}
[
:fn
{
:error/fn
(
fn
[
_
_
]
(
deferred-tru
"value must be a valid integer."
))}
#
(
u/ignore-exceptions
(
Integer/parseInt
%
))]]))
(
def
IntStringGreaterThanZero
...
...
@@ -171,7 +171,7 @@
(
mc/schema
[
:and
:string
[
:fn
{
:error/fn
(
fn
[]
(
deferred-tru
"value must be a valid integer greater than zero."
))}
[
:fn
{
:error/fn
(
fn
[
_
_
]
(
deferred-tru
"value must be a valid integer greater than zero."
))}
#
(
u/ignore-exceptions
(
<
0
(
Integer/parseInt
%
)))]]))
(
def
IntStringGreaterThanOrEqualToZero
...
...
@@ -180,7 +180,7 @@
(
mc/schema
[
:and
:string
[
:fn
{
:error/fn
(
fn
[]
(
deferred-tru
"value must be a valid integer greater than or equal to zero."
))}
[
:fn
{
:error/fn
(
fn
[
_
_
]
(
deferred-tru
"value must be a valid integer greater than or equal to zero."
))}
#
(
u/ignore-exceptions
(
<=
0
(
Integer/parseInt
%
)))]]))
(
def
BooleanString
...
...
@@ -194,7 +194,7 @@
(
mc/schema
[
:and
:string
[
:fn
{
:error/fn
(
fn
[]
(
deferred-tru
"value must be a valid date string"
))}
[
:fn
{
:error/fn
(
fn
[
_
_
]
(
deferred-tru
"value must be a valid date string"
))}
#
(
u/ignore-exceptions
(
boolean
(
u.date/parse
%
)))]]))
(
def
JSONString
...
...
@@ -202,7 +202,7 @@
(
mc/schema
[
:and
:string
[
:fn
{
:error/fn
(
fn
[]
(
deferred-tru
"value must be a valid JSON string."
))}
[
:fn
{
:error/fn
(
fn
[
_
_
]
(
deferred-tru
"value must be a valid JSON string."
))}
#
(
try
(
json/parse-string
%
)
true
...
...
@@ -245,7 +245,7 @@
Parameters we store on dashboard/card, and it has some difference with Parameter in MBQL."
;; TODO we could use :multi to dispatch values_source_type to the correct values_source_config
(
mc/schema
[
:map
{
:error/fn
(
fn
[]
(
deferred-tru
"parameter must be a map with :id and :type keys"
))}
[
:map
{
:error/fn
(
fn
[
_
_
]
(
deferred-tru
"parameter must be a map with :id and :type keys"
))}
[
:id
NonBlankString
]
[
:type
keyword-or-non-blank-str-malli
]
;; TODO how to merge this with ParameterSource above?
...
...
@@ -259,7 +259,7 @@
(
def
ParameterMapping
"Schema for a valid Parameter Mapping"
(
mc/schema
[
:map
{
:error/fn
(
fn
[]
(
deferred-tru
"parameter_mapping must be a map with :parameter_id and :target keys"
))}
[
:map
{
:error/fn
(
fn
[
_
_
]
(
deferred-tru
"parameter_mapping must be a map with :parameter_id and :target keys"
))}
[
:parameter_id
NonBlankString
]
[
:target
:any
]
[
:card_id
{
:optional
true
}
IntGreaterThanZero
]]))
...
...
@@ -267,7 +267,7 @@
(
def
EmbeddingParams
"Schema for a valid map of embedding params."
(
mc/schema
[
:map-of
{
:error/fn
(
fn
[]
(
deferred-tru
"value must be a valid embedding params map."
))}
[
:map-of
{
:error/fn
(
fn
[
_
_
]
(
deferred-tru
"value must be a valid embedding params map."
))}
:keyword
[
:enum
"disabled"
"enabled"
"locked"
]]))
...
...
@@ -276,11 +276,11 @@
(
mc/schema
[
:and
NonBlankString
[
:fn
{
:error/fn
(
fn
[]
(
deferred-tru
"String must be a valid two-letter ISO language or language-country code e.g. 'en' or 'en_US'."
))}
[
:fn
{
:error/fn
(
fn
[
_
_
]
(
deferred-tru
"String must be a valid two-letter ISO language or language-country code e.g. 'en' or 'en_US'."
))}
i18n/available-locale?
]]))
(
def
NanoIdString
"Schema for a 21-character NanoID string, like \"FReCLx5hSWTBU7kjCWfuu\"."
(
mc/schema
[
:re
{
:error/fn
(
fn
[]
(
deferred-tru
"String must be a valid 21-character NanoID string."
))}
[
:re
{
:error/fn
(
fn
[
_
_
]
(
deferred-tru
"String must be a valid 21-character NanoID string."
))}
#
"^[A-Za-z0-9_\-]{21}$"
]))
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment