diff --git a/src/elements/ScheduleRecurring/scheduleRecurring.scss b/src/elements/ScheduleRecurring/scheduleRecurring.scss
index a0d78612b..1d0d3a427 100644
--- a/src/elements/ScheduleRecurring/scheduleRecurring.scss
+++ b/src/elements/ScheduleRecurring/scheduleRecurring.scss
@@ -10,8 +10,15 @@
.repeat_container {
display: flex;
+ align-items: center;
margin: 15px 0;
+ & > * {
+ &:not(:last-child) {
+ margin: auto 10px auto 0;
+ }
+ }
+
.range {
margin-right: 15px;
}
@@ -21,8 +28,6 @@
align-items: center;
&-week {
- margin-left: 16px;
-
&_day {
width: 32px;
height: 32px;
@@ -41,15 +46,6 @@
}
}
}
-
- .select {
- margin-left: 5px;
- }
-
- &-text,
- &__text {
- margin: auto 5px;
- }
}
}
diff --git a/src/elements/TableCell/TableCell.js b/src/elements/TableCell/TableCell.js
index dd030e70b..5d70f1ba0 100644
--- a/src/elements/TableCell/TableCell.js
+++ b/src/elements/TableCell/TableCell.js
@@ -29,7 +29,7 @@ import TableProducerCell from '../TableProducerCell/TableProducerCell'
import TableTypeCell from '../TableTypeCell/TableTypeCell'
import { Tooltip, TextTooltipTemplate, RoundedIcon } from 'igz-controls/components'
-import { BUTTON_COPY_URI_CELL_TYPE } from '../../constants'
+import { BUTTON_COPY_URI_CELL_TYPE, DATASET_TYPE, MODEL_TYPE } from '../../constants'
import { getChipOptions } from '../../utils/getChipOptions'
import { showArtifactsPreview } from '../../reducers/artifactsReducer'
import { truncateUid } from '../../utils'
@@ -116,7 +116,15 @@ const TableCell = ({
return (
{
dispatch(
diff --git a/src/elements/TableLinkCell/tableLinkCell.scss b/src/elements/TableLinkCell/tableLinkCell.scss
index f34dee472..f04112afd 100644
--- a/src/elements/TableLinkCell/tableLinkCell.scss
+++ b/src/elements/TableLinkCell/tableLinkCell.scss
@@ -2,6 +2,7 @@
.table {
.table-body__cell {
+ line-height: 20px;
.name-wrapper {
display: flex;
flex: 1;
@@ -42,7 +43,7 @@
font-size: 12px;
font-family: Roboto, sans-serif;
font-style: normal;
- line-height: 18px;
+ margin-top: 5px;
& > span {
margin-right: 10px;
diff --git a/src/elements/TableTop/tableTop.scss b/src/elements/TableTop/tableTop.scss
index 3ddb9f0c3..b203ccc28 100644
--- a/src/elements/TableTop/tableTop.scss
+++ b/src/elements/TableTop/tableTop.scss
@@ -3,7 +3,7 @@
.table-top {
display: flex;
justify-content: space-between;
- margin: 27px 10px 5px 0;
+ margin: 20px 10px 5px 0;
.link-back {
display: flex;
diff --git a/src/elements/TableTypeCell/TableTypeCell.js b/src/elements/TableTypeCell/TableTypeCell.js
index de7bae8f7..08aad3312 100644
--- a/src/elements/TableTypeCell/TableTypeCell.js
+++ b/src/elements/TableTypeCell/TableTypeCell.js
@@ -19,10 +19,12 @@ such restriction.
*/
import React from 'react'
import PropTypes from 'prop-types'
+import { capitalize } from 'lodash'
import { Tooltip, TextTooltipTemplate } from 'igz-controls/components'
import { ReactComponent as Code } from 'igz-controls/images/code.svg'
+import { ReactComponent as DatabricksIcon } from 'igz-controls/images/databricks-icon.svg'
import { ReactComponent as Horovod } from 'igz-controls/images/horovod.svg'
import { ReactComponent as Jupyter } from 'igz-controls/images/jupyter.svg'
import { ReactComponent as Nuclio } from 'igz-controls/images/nuclio.svg'
@@ -30,28 +32,43 @@ import { ReactComponent as Package } from 'igz-controls/images/package.svg'
import { ReactComponent as Remote } from 'igz-controls/images/ic_remote.svg'
import { ReactComponent as Spark } from 'igz-controls/images/spark.svg'
import { ReactComponent as Workflow } from 'igz-controls/images/workflow-icon.svg'
+import {
+ JOB_KIND_DASK,
+ JOB_KIND_DATABRICKS,
+ JOB_KIND_HANDLER,
+ JOB_KIND_MPIJOB,
+ JOB_KIND_JOB,
+ JOB_KIND_LOCAL,
+ JOB_KIND_REMOTE,
+ JOB_KIND_NUCLIO,
+ JOB_KIND_SPARK,
+ JOB_KIND_WORKFLOW
+} from '../../constants'
const TableTypeCell = ({ className, data }) => {
const typesOfJob = {
'': { label: 'Local', icon: },
- dask: { label: 'Dask', icon: null },
- handler: { label: 'Handler', icon: },
- job: { label: 'Job', icon: },
- local: { label: 'Local', icon: },
- mpijob: { label: 'Horovod', icon: },
- nuclio: { label: 'Nuclio', icon: },
- remote: { label: 'Remote', icon: },
- spark: { label: 'Spark', icon: },
- workflow: { label: 'Workflow', icon: }
+ [JOB_KIND_DASK]: { label: 'Dask', icon: null },
+ [JOB_KIND_DATABRICKS]: { label: 'Databricks', icon: },
+ [JOB_KIND_HANDLER]: { label: 'Handler', icon: },
+ [JOB_KIND_JOB]: { label: 'Job', icon: },
+ [JOB_KIND_LOCAL]: { label: 'Local', icon: },
+ [JOB_KIND_MPIJOB]: { label: 'Horovod', icon: },
+ [JOB_KIND_NUCLIO]: { label: 'Nuclio', icon: },
+ [JOB_KIND_REMOTE]: { label: 'Remote', icon: },
+ [JOB_KIND_SPARK]: { label: 'Spark', icon: },
+ [JOB_KIND_WORKFLOW]: { label: 'Workflow', icon: }
}
return (
}
+ template={
+
+ }
>
- {typesOfJob[data.value]?.icon ?? data.value}
+ {typesOfJob[data.value]?.icon ?? capitalize(data.value)}
|
)
diff --git a/src/hooks/usePods.hook.js b/src/hooks/usePods.hook.js
index 9b0729357..b5ac08ebb 100644
--- a/src/hooks/usePods.hook.js
+++ b/src/hooks/usePods.hook.js
@@ -18,18 +18,29 @@ under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
import { useEffect } from 'react'
-import { isEmpty } from 'lodash'
+import { isEmpty, get } from 'lodash'
import { useParams } from 'react-router-dom'
+import { arePodsHidden } from '../components/Jobs/jobs.util'
+import { JOB_KIND_JOB } from '../constants'
+
export const usePods = (fetchJobPods, removePods, selectedJob) => {
const params = useParams()
useEffect(() => {
- if (!isEmpty(selectedJob)) {
- fetchJobPods(params.projectName, selectedJob.uid)
+ if (!isEmpty(selectedJob) && !arePodsHidden(selectedJob?.labels)) {
+ fetchJobPods(
+ params.projectName,
+ selectedJob.uid,
+ get(selectedJob, 'ui.originalContent.metadata.labels.kind', JOB_KIND_JOB)
+ )
const interval = setInterval(() => {
- fetchJobPods(params.projectName, selectedJob.uid)
+ fetchJobPods(
+ params.projectName,
+ selectedJob.uid,
+ get(selectedJob, 'ui.originalContent.metadata.labels.kind', JOB_KIND_JOB)
+ )
}, 30000)
return () => {
diff --git a/src/layout/Navbar/Navbar.utils.js b/src/layout/Navbar/Navbar.utils.js
index eea807c91..5a5f232c5 100644
--- a/src/layout/Navbar/Navbar.utils.js
+++ b/src/layout/Navbar/Navbar.utils.js
@@ -19,7 +19,7 @@ such restriction.
*/
import React from 'react'
-import { PROJECT_MONITOR } from '../../constants'
+import { PROJECT_MONITOR, PROJECT_QUICK_ACTIONS_PAGE } from '../../constants'
import { generateNuclioLink } from '../../utils'
import { ReactComponent as APIIcon } from 'igz-controls/images/navbar/mlrun-api-gateways.svg'
@@ -39,19 +39,18 @@ export const getLinks = projectName => {
const pathname = `/projects/${projectName}`
return [
- {
- icon: ,
- id: 'home',
- label: 'Project home',
- link: `${pathname}`,
- end: true
- },
{
icon: ,
id: PROJECT_MONITOR,
label: 'Project monitoring',
link: `${pathname}/${PROJECT_MONITOR}`
},
+ {
+ icon: ,
+ id: PROJECT_QUICK_ACTIONS_PAGE,
+ label: 'Quick actions',
+ link: `${pathname}/${PROJECT_QUICK_ACTIONS_PAGE}`
+ },
{
icon: ,
id: 'feature-store',
diff --git a/src/reducers/artifactsReducer.js b/src/reducers/artifactsReducer.js
index 32b5d41b0..8fc0f03e3 100644
--- a/src/reducers/artifactsReducer.js
+++ b/src/reducers/artifactsReducer.js
@@ -29,7 +29,7 @@ import {
import { filterArtifacts } from '../utils/filterArtifacts'
import { parseArtifacts } from '../utils/parseArtifacts'
import { generateArtifacts } from '../utils/generateArtifacts'
-import { ARTIFACTS, DATASETS, MODELS_TAB } from '../constants'
+import { ARTIFACTS, DATASETS, FUNCTION_TYPE_SERVING, MODELS_TAB } from '../constants'
import { getArtifactIdentifier } from '../utils/getUniqueIdentifier'
import functionsApi from '../api/functions-api'
import { parseFunctions } from '../utils/parseFunctions'
@@ -138,7 +138,7 @@ export const fetchArtifactsFunctions = createAsyncThunk(
({ project, filters }) => {
return functionsApi.getFunctions(project, filters).then(({ data }) => {
return parseFunctions(
- data.funcs.filter(func => func.kind === 'serving' && func.metadata.tag?.length)
+ data.funcs.filter(func => func.kind === FUNCTION_TYPE_SERVING && func.metadata.tag?.length)
)
})
}
@@ -264,6 +264,7 @@ const artifactsSlice = createSlice({
state.loading = false
})
builder.addCase(fetchFiles.rejected, defaultRejectedHandler)
+ builder.addCase(fetchArtifactsFunctions.pending, defaultPendingHandler)
builder.addCase(fetchArtifactsFunctions.fulfilled, (state, action) => {
state.error = null
state.pipelines = action.payload
diff --git a/src/reducers/filtersReducer.js b/src/reducers/filtersReducer.js
index 281c9cc5f..5c87c654d 100644
--- a/src/reducers/filtersReducer.js
+++ b/src/reducers/filtersReducer.js
@@ -35,6 +35,7 @@ import {
} from '../constants'
const initialState = {
+ saveFilters: false,
dates: {
value: DATE_FILTER_ANY_TIME,
isPredefined: false
diff --git a/src/reducers/functionReducer.js b/src/reducers/functionReducer.js
index bec254826..c5d35c015 100644
--- a/src/reducers/functionReducer.js
+++ b/src/reducers/functionReducer.js
@@ -18,62 +18,74 @@ under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
import {
- FETCH_FUNCTIONS_BEGIN,
- FETCH_FUNCTIONS_FAILURE,
- FETCH_FUNCTIONS_SUCCESS,
- FETCH_FUNCTION_TEMPLATE_BEGIN,
- FETCH_FUNCTION_TEMPLATE_FAILURE,
- FETCH_FUNCTION_TEMPLATE_SUCCESS,
- REMOVE_FUNCTION_TEMPLATE,
- SET_FUNCTIONS_TEMPLATES,
- SET_NEW_FUNCTION_NAME,
- SET_NEW_FUNCTION_TAG,
- SET_NEW_FUNCTION_DESCRIPTION,
- SET_NEW_FUNCTION_LABELS,
- SET_NEW_FUNCTION_SOURCE_CODE,
- SET_NEW_FUNCTION_HANDLER,
- SET_NEW_FUNCTION_IMAGE,
- SET_NEW_FUNCTION_BASE_IMAGE,
- SET_NEW_FUNCTION_COMMANDS,
- SET_NEW_FUNCTION_VOLUME_MOUNTS,
- SET_NEW_FUNCTION_VOLUMES,
- SET_NEW_FUNCTION_RESOURCES,
- SET_NEW_FUNCTION_ENV,
- REMOVE_NEW_FUNCTION,
CREATE_NEW_FUNCTION_BEGIN,
CREATE_NEW_FUNCTION_FAILURE,
CREATE_NEW_FUNCTION_SUCCESS,
- REMOVE_FUNCTIONS_ERROR,
DEPLOY_FUNCTION_BEGIN,
DEPLOY_FUNCTION_FAILURE,
DEPLOY_FUNCTION_SUCCESS,
- SET_NEW_FUNCTION_SECRETS,
- SET_NEW_FUNCTION_BUILD_IMAGE,
- SET_NEW_FUNCTION_PROJECT,
- RESET_NEW_FUNCTION_CODE_CUSTOM_IMAGE,
+ FETCH_FUNCTIONS_BEGIN,
+ FETCH_FUNCTIONS_FAILURE,
+ FETCH_FUNCTIONS_SUCCESS,
FETCH_FUNCTION_LOGS_BEGIN,
FETCH_FUNCTION_LOGS_FAILURE,
FETCH_FUNCTION_LOGS_SUCCESS,
- SET_NEW_FUNCTION,
- SET_NEW_FUNCTION_KIND,
- SET_NEW_FUNCTION_GRAPH,
- SET_NEW_FUNCTION_TRACK_MODELS,
- SET_NEW_FUNCTION_PARAMETERS,
- SET_NEW_FUNCTION_ERROR_STREAM,
- SET_NEW_FUNCTION_DEFAULT_CLASS,
- SET_NEW_FUNCTION_DISABLE_AUTO_MOUNT,
- GET_FUNCTION_SUCCESS,
- GET_FUNCTION_FAILURE,
+ FETCH_FUNCTION_TEMPLATE_BEGIN,
+ FETCH_FUNCTION_TEMPLATE_FAILURE,
+ FETCH_FUNCTION_TEMPLATE_SUCCESS,
+ FETCH_FUNCTIONS_TEMPLATES_FAILURE,
+ FETCH_HUB_FUNCTION_TEMPLATE_BEGIN,
+ FETCH_HUB_FUNCTION_TEMPLATE_FAILURE,
+ FETCH_HUB_FUNCTION_TEMPLATE_SUCCESS,
+ FETCH_HUB_FUNCTIONS_BEGIN,
+ FETCH_HUB_FUNCTIONS_FAILURE,
GET_FUNCTION_BEGIN,
+ GET_FUNCTION_FAILURE,
+ GET_FUNCTION_SUCCESS,
+ PANEL_DEFAULT_ACCESS_KEY,
REMOVE_FUNCTION,
+ REMOVE_FUNCTIONS_ERROR,
+ REMOVE_FUNCTION_TEMPLATE,
+ REMOVE_NEW_FUNCTION,
+ REMOVE_HUB_FUNCTIONS,
+ RESET_NEW_FUNCTION_CODE_CUSTOM_IMAGE,
+ SET_FUNCTIONS_TEMPLATES,
+ SET_NEW_FUNCTION,
+ SET_NEW_FUNCTION_BASE_IMAGE,
+ SET_NEW_FUNCTION_BUILD_IMAGE,
+ SET_NEW_FUNCTION_COMMANDS,
SET_NEW_FUNCTION_CREDENTIALS_ACCESS_KEY,
- PANEL_DEFAULT_ACCESS_KEY,
+ SET_NEW_FUNCTION_DEFAULT_CLASS,
+ SET_NEW_FUNCTION_DESCRIPTION,
+ SET_NEW_FUNCTION_DISABLE_AUTO_MOUNT,
+ SET_NEW_FUNCTION_ENV,
+ SET_NEW_FUNCTION_ERROR_STREAM,
SET_NEW_FUNCTION_FORCE_BUILD,
+ SET_NEW_FUNCTION_GRAPH,
+ SET_NEW_FUNCTION_HANDLER,
+ SET_NEW_FUNCTION_IMAGE,
+ SET_NEW_FUNCTION_KIND,
+ SET_NEW_FUNCTION_LABELS,
+ SET_NEW_FUNCTION_NAME,
+ SET_NEW_FUNCTION_PARAMETERS,
SET_NEW_FUNCTION_PREEMTION_MODE,
- SET_NEW_FUNCTION_PRIORITY_CLASS_NAME
+ SET_NEW_FUNCTION_PRIORITY_CLASS_NAME,
+ SET_NEW_FUNCTION_PROJECT,
+ SET_NEW_FUNCTION_REQUIREMENTS,
+ SET_NEW_FUNCTION_RESOURCES,
+ SET_NEW_FUNCTION_SECRETS,
+ SET_NEW_FUNCTION_SOURCE_CODE,
+ SET_NEW_FUNCTION_TAG,
+ SET_NEW_FUNCTION_TRACK_MODELS,
+ SET_NEW_FUNCTION_VOLUMES,
+ SET_NEW_FUNCTION_VOLUME_MOUNTS,
+ SET_HUB_FUNCTIONS,
+ FUNCTION_TYPE_JOB
} from '../constants'
const initialState = {
+ hubFunctions: [],
+ hubFunctionsCatalog: [],
functions: [],
func: {},
logs: {
@@ -83,7 +95,7 @@ const initialState = {
loading: false,
error: null,
newFunction: {
- kind: 'job',
+ kind: FUNCTION_TYPE_JOB,
metadata: {
credentials: {
access_key: PANEL_DEFAULT_ACCESS_KEY
@@ -98,7 +110,8 @@ const initialState = {
base_image: '',
commands: [],
functionSourceCode: '',
- image: ''
+ image: '',
+ requirements: []
},
default_class: '',
default_handler: '',
@@ -159,7 +172,7 @@ const functionReducer = (state = initialState, { type, payload }) => {
case FETCH_FUNCTIONS_BEGIN:
return {
...state,
- loading: true
+ loading: !payload
}
case FETCH_FUNCTIONS_SUCCESS:
return {
@@ -198,12 +211,6 @@ const functionReducer = (state = initialState, { type, payload }) => {
error: null
}
}
- case SET_FUNCTIONS_TEMPLATES:
- return {
- ...state,
- templates: payload.templates,
- templatesCatalog: payload.templatesCategories
- }
case FETCH_FUNCTION_TEMPLATE_BEGIN:
return {
...state,
@@ -222,6 +229,43 @@ const functionReducer = (state = initialState, { type, payload }) => {
template: {},
error: payload
}
+ case FETCH_FUNCTIONS_TEMPLATES_FAILURE:
+ return {
+ ...state,
+ loading: false,
+ templates: [],
+ templatesCatalog: {},
+ error: payload
+ }
+ case FETCH_HUB_FUNCTION_TEMPLATE_BEGIN:
+ return {
+ ...state,
+ loading: true
+ }
+ case FETCH_HUB_FUNCTION_TEMPLATE_SUCCESS:
+ return {
+ ...state,
+ loading: false
+ }
+ case FETCH_HUB_FUNCTION_TEMPLATE_FAILURE:
+ return {
+ ...state,
+ loading: false,
+ error: payload
+ }
+ case FETCH_HUB_FUNCTIONS_BEGIN:
+ return {
+ ...state,
+ loading: true
+ }
+ case FETCH_HUB_FUNCTIONS_FAILURE:
+ return {
+ ...state,
+ loading: false,
+ hubFunctions: [],
+ hubFunctionsCatalog: [],
+ error: payload
+ }
case GET_FUNCTION_BEGIN:
return {
...state,
@@ -261,6 +305,12 @@ const functionReducer = (state = initialState, { type, payload }) => {
...state,
newFunction: initialState.newFunction
}
+ case REMOVE_HUB_FUNCTIONS:
+ return {
+ ...state,
+ hubFunctions: [],
+ hubFunctionsCatalog: []
+ }
case RESET_NEW_FUNCTION_CODE_CUSTOM_IMAGE:
return {
...state,
@@ -277,6 +327,20 @@ const functionReducer = (state = initialState, { type, payload }) => {
}
}
}
+ case SET_FUNCTIONS_TEMPLATES:
+ return {
+ ...state,
+ templates: payload.templates,
+ templatesCatalog: payload.templatesCategories
+ }
+ case SET_HUB_FUNCTIONS:
+ return {
+ ...state,
+ loading: false,
+ hubFunctions: payload.hubFunctions,
+ hubFunctionsCatalog: payload.hubFunctionsCategories,
+ error: null
+ }
case SET_NEW_FUNCTION:
return {
...state,
@@ -324,6 +388,20 @@ const functionReducer = (state = initialState, { type, payload }) => {
}
}
}
+ case SET_NEW_FUNCTION_REQUIREMENTS:
+ return {
+ ...state,
+ newFunction: {
+ ...state.newFunction,
+ spec: {
+ ...state.newFunction.spec,
+ build: {
+ ...state.newFunction.spec.build,
+ requirements: payload
+ }
+ }
+ }
+ }
case SET_NEW_FUNCTION_DEFAULT_CLASS:
return {
...state,
diff --git a/src/reducers/jobReducer.js b/src/reducers/jobReducer.js
index 5778af56f..f72c14e6b 100644
--- a/src/reducers/jobReducer.js
+++ b/src/reducers/jobReducer.js
@@ -56,8 +56,6 @@ import {
FETCH_JOB_FAILURE,
FETCH_JOB_SUCCESS,
SET_NEW_JOB_CREDENTIALS_ACCESS_KEY,
- FETCH_SCHEDULED_JOB_ACCESS_KEY_BEGIN,
- FETCH_SCHEDULED_JOB_ACCESS_KEY_END,
REMOVE_JOB,
FETCH_ALL_JOB_RUNS_BEGIN,
FETCH_ALL_JOB_RUNS_FAILURE,
@@ -67,7 +65,10 @@ import {
FETCH_JOB_FUNCTIONS_SUCCESS,
FETCH_JOB_FUNCTIONS_FAILURE,
FETCH_JOB_FUNCTIONS_BEGIN,
- REMOVE_JOB_FUNCTION
+ REMOVE_JOB_FUNCTION,
+ DELETE_JOB_BEGIN,
+ DELETE_JOB_FAILURE,
+ DELETE_JOB_SUCCESS
} from '../constants'
const initialState = {
@@ -136,6 +137,23 @@ const jobReducer = (state = initialState, { type, payload }) => {
loading: false,
error: null
}
+ case DELETE_JOB_BEGIN:
+ return {
+ ...state,
+ loading: true
+ }
+ case DELETE_JOB_FAILURE:
+ return {
+ ...state,
+ loading: false,
+ error: payload
+ }
+ case DELETE_JOB_SUCCESS:
+ return {
+ ...state,
+ loading: false,
+ error: null
+ }
case EDIT_JOB_FAILURE:
return {
...state,
@@ -257,16 +275,6 @@ const jobReducer = (state = initialState, { type, payload }) => {
jobs: payload,
loading: false
}
- case FETCH_SCHEDULED_JOB_ACCESS_KEY_BEGIN:
- return {
- ...state,
- loading: true
- }
- case FETCH_SCHEDULED_JOB_ACCESS_KEY_END:
- return {
- ...state,
- loading: false
- }
case REMOVE_JOB:
return {
...state,
diff --git a/src/scss/main.scss b/src/scss/main.scss
index 8f86d17b2..089fc4db2 100644
--- a/src/scss/main.scss
+++ b/src/scss/main.scss
@@ -213,6 +213,7 @@ main {
flex: 1;
position: relative;
text-align: left;
+ width: 100%;
.table {
&-row {
@@ -267,12 +268,31 @@ main {
&.parent-row {
&:not(.parent-row-expanded) {
&:not(.parent-row_without-actions) {
+ .table-cell-icon {
+ .actions-menu {
+ &__container_extended {
+ background-color: $white;
+
+ &:before {
+ background: linear-gradient(90deg, rgba(255,255,255,0) 0%, rgba(255,255,255,1) 100%);
+ }
+ }
+ }
+ }
&:hover {
.table-cell-icon {
.actions-menu {
&__container {
display: flex;
+ &_extended {
+ background-color: $ghostWhite;
+
+ &:before {
+ background: linear-gradient(90deg, rgba(255,255,255,0) 0%, rgba(245,247,255,1) 100%);
+ }
+ }
+
.btn {
min-width: 24px;
padding: 0;
@@ -443,14 +463,14 @@ a {
text-decoration: none;
}
-[class^='state-completed'],
-[class^='state-ready'],
-[class^='state-succeeded'],
[class^='state-active'],
+[class^='state-completed'],
[class^='state-created'],
[class^='state-creating'],
[class^='state-info'],
-[class^='state-online'] {
+[class^='state-online'],
+[class^='state-ready'],
+[class^='state-succeeded'] {
@include statusState($brightTurquoise);
}
@@ -458,22 +478,26 @@ a {
@include statusState(transparent);
}
+[class^='state-initialized'] {
+ @include statusState($chateauGreen);
+}
+
[class^='state-warn'] {
@include statusState($grandis);
}
-[class^='state-deploying'],
[class^='state-build'],
+[class^='state-deploying'],
[class^='state-pending'],
[class^='state-running'] {
@include statusState($pictonBlue);
}
-[class^='state-failed'],
-[class^='state-fail'],
-[class^='state-error'],
+[class^='state-aborted'],
[class^='state-broken'],
-[class^='state-aborted'] {
+[class^='state-error'],
+[class^='state-fail'],
+[class^='state-failed'] {
@include statusState($burntSienna);
}
@@ -601,6 +625,10 @@ iframe {
&-s3 {
color: $sorbus;
}
+
+ &-dbfs {
+ color: $chateauGreen;
+ }
}
}
@@ -729,6 +757,8 @@ iframe {
display: block;
font-weight: 500;
font-size: 20px;
+ margin-bottom: 10px;
+ padding-top: 10px;
.tip-container {
margin-left: 5px;
diff --git a/src/types.js b/src/types.js
index 13d5f5056..83a81cdd4 100644
--- a/src/types.js
+++ b/src/types.js
@@ -113,8 +113,16 @@ export const CONFIRM_DIALOG_BUTTON = PropTypes.shape({
variant: PropTypes.string.isRequired
})
+const ACTIONS_MENU_ITEM = PropTypes.shape({
+ label: PropTypes.string.isRequired,
+ icon: PropTypes.object,
+ onClick: PropTypes.func.isRequired,
+ disabled: PropTypes.bool,
+ className: PropTypes.string
+})
+
export const ACTIONS_MENU = PropTypes.oneOfType([
- PropTypes.arrayOf(PropTypes.shape({})),
+ PropTypes.arrayOf(PropTypes.arrayOf(ACTIONS_MENU_ITEM.isRequired)),
PropTypes.func
])
diff --git a/src/utils/convertChipsData.js b/src/utils/convertChipsData.js
index 80d7cbfeb..59541533a 100644
--- a/src/utils/convertChipsData.js
+++ b/src/utils/convertChipsData.js
@@ -18,7 +18,7 @@ under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
-// [{key: "", value: ""}] --> {key: 'value'}
+// [{key: "myKey", value: "myValue"}] --> {myKey: "myValue"}
export const convertChipsData = (chips = []) => {
return chips.reduce((list, label) => {
list[label.key] = label.value
@@ -27,7 +27,7 @@ export const convertChipsData = (chips = []) => {
}, {})
}
-// {key: 'value'} --> [{id: "", key: "", value: ""}]
+// {myKey: "myValue"} --> [{id: "myKey0", key: "myKey", value: "myValue"}]
export const parseChipsData = (labels = {}, delimiter = null) => {
return labels == null
? []
diff --git a/src/utils/copyToClipboard.js b/src/utils/copyToClipboard.js
index 7098479a5..eb176b5e7 100644
--- a/src/utils/copyToClipboard.js
+++ b/src/utils/copyToClipboard.js
@@ -17,12 +17,28 @@ illegal under applicable law, and the grant of the foregoing license
under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
-export const copyToClipboard = str => {
- const textArea = document.createElement('textarea')
- textArea.value = str
+import { setNotification } from '../reducers/notificationReducer'
- document.body.appendChild(textArea)
- textArea.select()
- document.execCommand('copy')
- document.body.removeChild(textArea)
+export const copyToClipboard = (textToCopy, dispatch) => {
+ navigator.clipboard
+ .writeText(textToCopy)
+ .then(() => {
+ dispatch(
+ setNotification({
+ status: 200,
+ id: Math.random(),
+ message: 'Copied to clipboard successfully'
+ })
+ )
+ })
+ .catch(err => {
+ dispatch(
+ setNotification({
+ error: err,
+ status: 400,
+ id: Math.random(),
+ message: 'Copy to clipboard failed'
+ })
+ )
+ })
}
diff --git a/src/utils/createArtifactsContent.js b/src/utils/createArtifactsContent.js
index 85a937a6b..bcf839133 100644
--- a/src/utils/createArtifactsContent.js
+++ b/src/utils/createArtifactsContent.js
@@ -22,20 +22,17 @@ import { isNumber } from 'lodash'
import {
ARTIFACTS_PAGE,
- DATASETS,
DATASETS_PAGE,
FILES_PAGE,
MODELS_PAGE,
MODELS_TAB,
- MODEL_ENDPOINTS_TAB,
- BUTTON_COPY_URI_CELL_TYPE,
- ARTIFACTS
+ MODEL_ENDPOINTS_TAB
} from '../constants'
import { parseKeyValues } from './object'
import { formatDatetime } from './datetime'
import { convertBytes } from './convertBytes'
-import { generateUri } from './resources'
-import { generateLinkPath, parseUri } from '../utils'
+import { parseUri } from './parseUri'
+import { generateFunctionDetailsLink } from './generateFunctionDetailsLink'
import { generateLinkToDetailsPanel } from './generateLinkToDetailsPanel'
import { validateArguments } from './validateArguments'
@@ -105,7 +102,8 @@ const createArtifactsRowData = artifact => {
}
const getIter = artifact => (isNaN(parseInt(artifact?.iter)) ? '' : ` #${artifact?.iter}`)
-const getIsTargetPathValid = (artifact, frontendSpec) =>
+
+export const getIsTargetPathValid = (artifact, frontendSpec) =>
frontendSpec?.allowed_artifact_path_prefixes_list
? frontendSpec.allowed_artifact_path_prefixes_list.some(prefix => {
return artifact.target_path?.startsWith?.(prefix)
@@ -114,7 +112,6 @@ const getIsTargetPathValid = (artifact, frontendSpec) =>
export const createModelsRowData = (artifact, project, frontendSpec, showExpandButton) => {
const iter = getIter(artifact)
- const isTargetPathValid = getIsTargetPathValid(artifact, frontendSpec)
return {
data: {
@@ -220,38 +217,22 @@ export const createModelsRowData = (artifact, project, frontendSpec, showExpandB
value: artifact.tag,
class: 'table-cell-1',
type: 'hidden'
- },
- {
- id: `buttonPopout.${artifact.ui.identifierUnique}`,
- headerId: 'popupt',
- value: '',
- class: 'table-cell-icon',
- type: 'buttonPopout',
- disabled: !isTargetPathValid
- },
- {
- id: `buttonDownload.${artifact.ui.identifierUnique}`,
- headerId: 'download',
- value: '',
- class: 'table-cell-icon',
- type: 'buttonDownload',
- disabled: !isTargetPathValid
- },
- {
- id: `buttonCopy.${artifact.ui.identifierUnique}`,
- headerId: 'copy',
- value: '',
- class: 'table-cell-icon',
- type: BUTTON_COPY_URI_CELL_TYPE,
- actionHandler: item => generateUri(item, MODELS_TAB)
}
+ //TODO: remove when new Download will be added
+ // {
+ // id: `buttonDownload.${artifact.ui.identifierUnique}`,
+ // headerId: 'download',
+ // value: '',
+ // class: 'table-cell-icon',
+ // type: 'buttonDownload',
+ // disabled: !isTargetPathValid
+ // }
]
}
}
export const createFilesRowData = (artifact, project, frontendSpec, showExpandButton) => {
const iter = getIter(artifact)
- const isTargetPathValid = getIsTargetPathValid(artifact, frontendSpec)
return {
data: {
@@ -341,31 +322,16 @@ export const createFilesRowData = (artifact, project, frontendSpec, showExpandBu
headerLabel: 'Size',
value: isNumber(artifact.size) && artifact.size >= 0 ? convertBytes(artifact.size) : 'N/A',
class: 'table-cell-1'
- },
- {
- id: `buttonPopout.${artifact.ui.identifierUnique}`,
- headerId: 'popout',
- value: '',
- class: 'table-cell-icon',
- type: 'buttonPopout',
- disabled: !isTargetPathValid
- },
- {
- id: `buttonDownload.${artifact.ui.identifierUnique}`,
- headerId: 'download',
- value: '',
- class: 'table-cell-icon',
- type: 'buttonDownload',
- disabled: !isTargetPathValid
- },
- {
- id: `buttonCopy.${artifact.ui.identifierUnique}`,
- headerId: 'copy',
- value: '',
- class: 'table-cell-icon',
- type: BUTTON_COPY_URI_CELL_TYPE,
- actionHandler: item => generateUri(item, ARTIFACTS)
}
+ //TODO: remove when new Download will be added
+ // {
+ // id: `buttonDownload.${artifact.ui.identifierUnique}`,
+ // headerId: 'download',
+ // value: '',
+ // class: 'table-cell-icon',
+ // type: 'buttonDownload',
+ // disabled: !isTargetPathValid
+ // },
]
}
}
@@ -425,7 +391,7 @@ export const createModelEndpointsRowData = (artifact, project) => {
headerLabel: 'Function',
value: functionName,
class: 'table-cell-1',
- link: `${generateLinkPath(functionUri)}/overview`,
+ getLink: () => generateFunctionDetailsLink(artifact.spec?.function_uri),
tooltip: functionUri
},
{
@@ -499,7 +465,6 @@ export const createModelEndpointsRowData = (artifact, project) => {
export const createDatasetsRowData = (artifact, project, frontendSpec, showExpandButton) => {
const iter = getIter(artifact)
- const isTargetPathValid = getIsTargetPathValid(artifact, frontendSpec)
return {
data: {
@@ -582,31 +547,16 @@ export const createDatasetsRowData = (artifact, project, frontendSpec, showExpan
value: artifact.tag,
class: 'table-cell-1',
type: 'hidden'
- },
- {
- id: `buttonPopout.${artifact.ui.identifierUnique}`,
- headerId: 'popout',
- value: '',
- class: 'table-cell-icon',
- type: 'buttonPopout',
- disabled: !isTargetPathValid
- },
- {
- id: `buttonDownload.${artifact.ui.identifierUnique}`,
- headerId: 'download',
- value: '',
- class: 'table-cell-icon',
- type: 'buttonDownload',
- disabled: !isTargetPathValid
- },
- {
- id: `buttonCopy.${artifact.ui.identifierUnique}`,
- headerId: 'copy',
- value: '',
- class: 'table-cell-icon',
- type: BUTTON_COPY_URI_CELL_TYPE,
- actionHandler: item => generateUri(item, DATASETS)
}
+ //TODO: remove when new Download will be added
+ // {
+ // id: `buttonDownload.${artifact.ui.identifierUnique}`,
+ // headerId: 'download',
+ // value: '',
+ // class: 'table-cell-icon',
+ // type: 'buttonDownload',
+ // disabled: !isTargetPathValid
+ // }
]
}
}
diff --git a/src/utils/createConsumerGroupsContent.js b/src/utils/createConsumerGroupsContent.js
index c84a60db1..de3ebfe8c 100644
--- a/src/utils/createConsumerGroupsContent.js
+++ b/src/utils/createConsumerGroupsContent.js
@@ -33,7 +33,7 @@ const createConsumerGroupsContent = (content, params) => {
identifier: identifier,
identifierUnique: identifier,
getLink: () => {
- return `/projects/${params.projectName}/monitor/consumer-groups/${contentItem.consumerGroup}`
+ return `/projects/${params.projectName}/monitor/consumer-groups/${contentItem.functionName}/${contentItem.streamName}`
}
},
streamPath: {
diff --git a/src/utils/createJobsContent.js b/src/utils/createJobsContent.js
index 7f462b904..fa29e5b9e 100644
--- a/src/utils/createJobsContent.js
+++ b/src/utils/createJobsContent.js
@@ -18,7 +18,13 @@ under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
-import { FUNCTIONS_PAGE, JOBS_PAGE, MONITOR_JOBS_TAB, MONITOR_WORKFLOWS_TAB } from '../constants'
+import {
+ FUNCTIONS_PAGE,
+ JOB_KIND_WORKFLOW,
+ JOBS_PAGE,
+ MONITOR_JOBS_TAB,
+ MONITOR_WORKFLOWS_TAB
+} from '../constants'
import { formatDatetime } from './datetime'
import measureTime from './measureTime'
import { parseKeyValues } from './object'
@@ -67,7 +73,7 @@ export const createJobsMonitorTabContent = (jobs, jobName, isStagingMode) => {
id: `name.${identifierUnique}`,
value: jobName ? job.uid || job.id : job.name,
class: 'table-cell-name',
- type: type === 'workflow' && !isStagingMode ? 'hidden' : 'link',
+ type: type === JOB_KIND_WORKFLOW && !isStagingMode ? 'hidden' : 'link',
getLink,
showStatus: true
},
diff --git a/src/utils/generateFunctionDetailsLink.js b/src/utils/generateFunctionDetailsLink.js
new file mode 100644
index 000000000..4e7c13395
--- /dev/null
+++ b/src/utils/generateFunctionDetailsLink.js
@@ -0,0 +1,33 @@
+/*
+Copyright 2019 Iguazio Systems Ltd.
+
+Licensed under the Apache License, Version 2.0 (the "License") with
+an addition restriction as set forth herein. You may not use this
+file except in compliance with the License. You may obtain a copy of
+the License at http://www.apache.org/licenses/LICENSE-2.0.
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+implied. See the License for the specific language governing
+permissions and limitations under the License.
+
+In addition, you may not use the software for any purposes that are
+illegal under applicable law, and the grant of the foregoing license
+under the Apache 2.0 license is conditioned upon your compliance with
+such restriction.
+*/
+import { generateLinkPath } from './parseUri'
+
+export const generateFunctionDetailsLink = (uri = '') => {
+ // remove 'latest' when function_uri will contain hash or tag
+ //
+ // 'my_proj/func_name@func_hash' -> projects/my_proj/functions/func_hash/overview
+ // 'my_proj/func_name' -> projects/my_proj/functions/func_name/latest/overview
+ // 'my_proj/func_name:custom_tag' -> projects/my_proj/functions/func_name/custom_tag/overview
+ return uri
+ ? `${generateLinkPath(`store://functions/${uri}`, uri.includes('@'))}${
+ uri.includes(':') || uri.includes('@') ? '' : '/latest'
+ }/overview`
+ : ''
+}
diff --git a/src/utils/generateTemplatesCategories.js b/src/utils/generateTemplatesCategories.js
index 51180c70a..73c3b9e75 100644
--- a/src/utils/generateTemplatesCategories.js
+++ b/src/utils/generateTemplatesCategories.js
@@ -17,17 +17,23 @@ illegal under applicable law, and the grant of the foregoing license
under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
-const excludeCategoryKinds = ['serving', 'nuclio', 'remote']
+
+import { functionRunKinds } from '../components/Jobs/jobs.util'
+
+const excludedFunctionNames = ['batch-inference']
export const aliasToCategory = {
+ analysis: 'data-analysis',
BERT: 'other',
'concept-drift': 'other',
- 'data-movement': 'data-source',
+ 'data-movement': 'etl',
+ 'data-source': 'etl',
embeddings: 'other',
experimental: 'other',
ops: 'notifications',
- 'sentiment analysis': 'analysis',
- serve: 'serving',
+ 'sentiment analysis': 'data-analysis',
+ serve: 'model-serving',
+ serving: 'model-serving',
test: 'other',
utils: 'other'
}
@@ -52,7 +58,7 @@ export const generateCategories = functionTemplates => {
categories: value?.categories.map(category => aliasToCategory[category] ?? category)
}
}))
- .filter(template => !excludeCategoryKinds.includes(template.kind))
+ .filter(template => functionRunKinds.includes(template.kind))
const templatesCategories = {}
@@ -70,3 +76,37 @@ export const generateCategories = functionTemplates => {
return { templates, templatesCategories }
}
+
+export const generateHubCategories = functionTemplates => {
+ const hubFunctions = functionTemplates
+ .map(template => ({
+ ...template,
+ ui: {
+ categories: template.metadata?.categories.map(
+ category => aliasToCategory[category] ?? category
+ ),
+ versions: functionTemplates
+ .filter(funcTemplate => funcTemplate.metadata.name === template.metadata.name)
+ .map(funcTemplate => funcTemplate.metadata.version)
+ }
+ }))
+ .filter(
+ template =>
+ functionRunKinds.includes(template.spec.kind) &&
+ !excludedFunctionNames.includes(template.metadata.name)
+ )
+
+ const hubFunctionsCategories = []
+
+ hubFunctions.forEach(template => {
+ template.metadata.categories.forEach(category => {
+ const valueToAdd = aliasToCategory[category] ?? category
+
+ if (!hubFunctionsCategories.includes(valueToAdd)) {
+ hubFunctionsCategories.push(valueToAdd)
+ }
+ })
+ })
+
+ return { hubFunctions, hubFunctionsCategories }
+}
diff --git a/src/utils/getCloseDetailsLink.js b/src/utils/getCloseDetailsLink.js
index d80c0029f..ebd51ae1e 100644
--- a/src/utils/getCloseDetailsLink.js
+++ b/src/utils/getCloseDetailsLink.js
@@ -20,6 +20,6 @@ such restriction.
export const getCloseDetailsLink = (location, paramName) => {
return location.pathname
.split('/')
- .splice(0, location.pathname.split('/').indexOf(paramName) + 1)
+ .splice(0, location.pathname.split('/').lastIndexOf(paramName) + 1)
.join('/')
}
diff --git a/src/utils/getNoDataMessage.js b/src/utils/getNoDataMessage.js
index 9abeb4ce7..ef5aef3a6 100644
--- a/src/utils/getNoDataMessage.js
+++ b/src/utils/getNoDataMessage.js
@@ -177,6 +177,8 @@ const getChangedFiltersList = (filters, filtersStore, filtersStoreKey) => {
: filtersStore.iter === SHOW_ITERATIONS
return (
+ (type === LABELS_FILTER &&
+ filtersStore.filterMenuModal[filtersStoreKey]?.values?.labels.length > 0) ||
(type === TAG_FILTER && isTagChanged) ||
((type === NAME_FILTER || type === LABELS_FILTER) && filtersStore[type].length > 0) ||
(type === STATUS_FILTER && filtersStore.state !== STATE_FILTER_ALL_ITEMS) ||
diff --git a/src/utils/getState.js b/src/utils/getState.js
index 29bc71b31..bcd4e90c7 100644
--- a/src/utils/getState.js
+++ b/src/utils/getState.js
@@ -17,14 +17,20 @@ illegal under applicable law, and the grant of the foregoing license
under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
-import { FUNCTION_CREATING_STATE, FUNCTIONS_PAGE } from '../constants'
+
+import { isEmpty } from 'lodash'
+import { FUNCTION_INITIALIZED_STATE, FUNCTIONS_PAGE } from '../constants'
const getState = (state, page, kind) => {
+ const stateExists = !isEmpty(state)
+
if (page === FUNCTIONS_PAGE) {
return {
- value: state || FUNCTION_CREATING_STATE,
- label: state ? functionStateLabels[state] : 'Creating',
- className: `state-${state || FUNCTION_CREATING_STATE}${kind ? '-' + kind : ''}`
+ value: stateExists ? state : FUNCTION_INITIALIZED_STATE,
+ label: stateExists ? functionStateLabels[state] : 'Initialized',
+ className: `state-${stateExists ? state : FUNCTION_INITIALIZED_STATE}${
+ kind ? '-' + kind : ''
+ }`
}
} else {
return {
diff --git a/src/utils/object.js b/src/utils/object.js
index 1da3a4aca..9117fcfd6 100755
--- a/src/utils/object.js
+++ b/src/utils/object.js
@@ -19,7 +19,7 @@ such restriction.
*/
import { isNil } from 'lodash'
-// {key: 'value'} --> ["key: value", "key: value"]
+// {key: "value", key2: "value2"} --> ["key: value", "key2: value2"]
export const parseKeyValues = (object = {}) =>
object == null
? []
@@ -33,13 +33,11 @@ export const parseKeyValues = (object = {}) =>
: ` ${arrayItem} `
})}]`
: typeof value === 'object' && value !== null
- ? `${key}: {${Object.entries(value).map(
- ([valueKey, valueContent]) => ` ${valueKey}: ${valueContent} `
- )}}`
+ ? `${key}: ${JSON.stringify(value, null, 1)}`
: `${key}: ${value}`
})
-// ['key: value'] -> {key: 'value'}
+// ["key: value", "key2: value2"] -> {key: "value", key2: "value2"}
export const generateKeyValues = (data = []) => {
const keyValuePairs = {}
diff --git a/src/utils/panelPathScheme.js b/src/utils/panelPathScheme.js
index 6a1b444c1..b424e2237 100644
--- a/src/utils/panelPathScheme.js
+++ b/src/utils/panelPathScheme.js
@@ -96,7 +96,9 @@ export const pathTips = projectItem => {
? 'feature-vector'
: projectItem === 'datasets'
? 'dataset'
- : 'artifact'
+ : projectItem === 'artifacts'
+ ? 'artifact'
+ : 'model'
return {
[MLRUN_STORAGE_INPUT_PATH_SCHEME]: `${pathType}s/my-project/my-${pathType}:my-tag" or "${pathType}s/my-project/my-${pathType}@my-uid`,
diff --git a/src/utils/parseJob.js b/src/utils/parseJob.js
index cb81438dc..3bdd764e5 100644
--- a/src/utils/parseJob.js
+++ b/src/utils/parseJob.js
@@ -17,7 +17,13 @@ illegal under applicable law, and the grant of the foregoing license
under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
-import { JOBS_PAGE, SCHEDULE_TAB } from '../constants'
+import {
+ JOB_KIND_JOB,
+ JOB_KIND_PIPELINE,
+ JOB_KIND_WORKFLOW,
+ JOBS_PAGE,
+ SCHEDULE_TAB
+} from '../constants'
import getState from './getState'
import { parseKeyValues } from './object'
import { getJobIdentifier } from './getUniqueIdentifier'
@@ -26,6 +32,9 @@ export const parseJob = (job, tab) => {
let jobItem = null
if (tab === SCHEDULE_TAB) {
+ const jobHasWorkflowLabel =
+ job.labels && 'job-type' in job.labels && job.labels['job-type'] === 'workflow-runner'
+
jobItem = {
createdTime: new Date(job.creation_time),
func: job.scheduled_object.task.spec.function,
@@ -35,8 +44,8 @@ export const parseJob = (job, tab) => {
project: job.project,
scheduled_object: job.scheduled_object,
startTime: new Date(job.last_run?.status?.start_time),
- state: getState(job.last_run?.status?.state, JOBS_PAGE, 'job'),
- type: job.kind === 'pipeline' ? 'workflow' : job.kind,
+ state: getState(job.last_run?.status?.state, JOBS_PAGE, JOB_KIND_JOB),
+ type: job.kind === JOB_KIND_PIPELINE || jobHasWorkflowLabel ? JOB_KIND_WORKFLOW : job.kind,
ui: {
originalContent: job
}
@@ -68,7 +77,7 @@ export const parseJob = (job, tab) => {
results: job.status?.results || {},
resultsChips: parseKeyValues(job.status?.results || {}),
startTime: new Date(job.status?.start_time),
- state: getState(job.status?.state, JOBS_PAGE, 'job'),
+ state: getState(job.status?.state, JOBS_PAGE, JOB_KIND_JOB),
ui_run: job.status?.ui_url,
uid: job.metadata.uid,
updated: new Date(job.status?.last_update),
diff --git a/src/utils/parseUri.js b/src/utils/parseUri.js
index 624945329..9a12366db 100644
--- a/src/utils/parseUri.js
+++ b/src/utils/parseUri.js
@@ -91,11 +91,11 @@ const kindToScreen = {
models: `models/${MODELS_TAB}`
}
-const generateLinkPath = (uri = '') => {
+const generateLinkPath = (uri = '', ignoreKey = false) => {
const { kind, project, key, tag, uid } = parseUri(uri)
const screen = kindToScreen[kind] ?? 'files'
const reference = tag ?? uid
- return `/projects/${project}/${screen}/${key}${reference ? `/${reference}` : ''}`
+ return `/projects/${project}/${screen}${ignoreKey ? '' : `/${key}`}${reference ? `/${reference}` : ''}`
}
const generateNuclioLink = pathname => {
diff --git a/src/utils/parseWorkflows.js b/src/utils/parseWorkflows.js
index 30c71594a..f0468a713 100644
--- a/src/utils/parseWorkflows.js
+++ b/src/utils/parseWorkflows.js
@@ -18,17 +18,13 @@ under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
import getState from './getState'
-import { MONITOR_WORKFLOWS_TAB } from '../constants'
+import { JOB_KIND_WORKFLOW, MONITOR_WORKFLOWS_TAB } from '../constants'
export const parseWorkflows = workflows => {
return workflows.map(workflow => {
return {
...workflow,
- state: getState(
- workflow.status.toLowerCase(),
- MONITOR_WORKFLOWS_TAB,
- 'workflow'
- ),
+ state: getState(workflow.status.toLowerCase(), MONITOR_WORKFLOWS_TAB, JOB_KIND_WORKFLOW),
ui: {
originalContent: workflow
}
diff --git a/src/utils/string.js b/src/utils/string.js
index 949ebdffc..ba2337934 100755
--- a/src/utils/string.js
+++ b/src/utils/string.js
@@ -42,3 +42,8 @@ export const trimSplit = (value, delimiter) => {
const trimmed = (value ?? '').trim()
return trimmed ? trimmed.split(delimiter) : []
}
+
+export const splitTrim = (value, delimiter) => {
+ const arr = value.split(delimiter)
+ return arr.map(string => string.trim())
+}
diff --git a/tests/features/MLFunction.feature b/tests/features/MLFunction.feature
index d6d818772..c1fc6b5d2 100644
--- a/tests/features/MLFunction.feature
+++ b/tests/features/MLFunction.feature
@@ -102,7 +102,7 @@ Feature: ML Functions
@passive
@inProgress
- Scenario: Check all mandatory components on Create ML Function Popup
+ Scenario: MLF003 - Check all mandatory components on Create ML Function Popup
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -1238,4 +1238,37 @@ Feature: ML Functions
Then verify "Overview" tab is active in "Info_Pane_Tab_Selector" on "Models_Info_Pane" wizard
Then verify "Header" element visibility on "Models_Info_Pane" wizard
Then save to context "name" column on 2 row from "Functions_Table" table on "ML_Functions" wizard
- Then compare "Header" element value on "Models_Info_Pane" wizard with test "name" context value
\ No newline at end of file
+ Then compare "Header" element value on "Models_Info_Pane" wizard with test "name" context value
+
+Scenario: MLF002 - Check requirements field in Code Accordion on Create New Function page
+ Given open url
+ And wait load page
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "ML functions" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And hover "MLRun_Logo" component on "commonPagesHeader" wizard
+ And wait load page
+ And click on "New_Function_Button" element on "ML_Functions" wizard
+ And type value "demo-function-02" to "New_Function_Name_Input" field on "Create_ML_Function_Popup" wizard
+ And click on "Continue_Button" element on "Create_ML_Function_Popup" wizard
+ When collapse "General_Accordion" on "New_Function" wizard
+ Then is "Use_An_Existing_Image_Radiobutton" in "Code_Accordion" on "New_Function" selected
+ Then is not "Build_A_New_Image_Radiobutton" in "Code_Accordion" on "New_Function" selected
+ Then verify "New_Function_Image_Name_Input" element in "Code_Accordion" on "New_Function" wizard is enabled
+ Then verify "New_Function_Resulting_Image_Input" element in "Code_Accordion" on "New_Function" wizard is disabled
+ Then verify "New_Function_Base_Image_Input" element in "Code_Accordion" on "New_Function" wizard is disabled
+ Then verify "New_Requirements_Input" element in "Code_Accordion" on "New_Function" wizard is disabled
+ Then verify "New_Function_Build_Commands_Text_Area" not input element in "Code_Accordion" on "New_Function" wizard is disabled
+ When select "Build_A_New_Image_Radiobutton" in "Code_Accordion" on "New_Function"
+ Then is "Build_A_New_Image_Radiobutton" in "Code_Accordion" on "New_Function" selected
+ Then is not "Use_An_Existing_Image_Radiobutton" in "Code_Accordion" on "New_Function" selected
+ Then verify "New_Function_Image_Name_Input" element in "Code_Accordion" on "New_Function" wizard is disabled
+ Then verify "New_Function_Resulting_Image_Input" element in "Code_Accordion" on "New_Function" wizard is enabled
+ Then verify "New_Function_Base_Image_Input" element in "Code_Accordion" on "New_Function" wizard is enabled
+ Then verify "New_Requirements_Input" element in "Code_Accordion" on "New_Function" wizard is enabled
+ Then verify "New_Function_Build_Commands_Text_Area" not input element in "Code_Accordion" on "New_Function" wizard is enabled
+ Then click on "Save_Button" element on "New_Function" wizard
+ And wait load page
+ Then "Header" element on "ML_Function_Info_Pane" should contains "demo-function-02" value
+ Then check "demo-function-02" value in "name" column in "Overview_Table" table on "ML_Function_Info_Pane" wizard
\ No newline at end of file
diff --git a/tests/features/common-tools/common-consts.js b/tests/features/common-tools/common-consts.js
index 7744d0f19..f9123ac0c 100644
--- a/tests/features/common-tools/common-consts.js
+++ b/tests/features/common-tools/common-consts.js
@@ -134,7 +134,7 @@ module.exports = {
]
},
Models_Info_Pane: {
- Tab_List: ['Overview', 'Preview'], //delete 'Preview'
+ Tab_List: ['Overview'],
Tab_List_Extended: ['Overview', 'Preview', 'Features', 'Statistics'],
Overview_General_Headers: [
'Hash',
@@ -162,6 +162,7 @@ module.exports = {
'Model class',
'Model artifact',
'Function URI',
+ 'Function Tag',
'Feature set',
'Last prediction',
'Error count',
@@ -195,6 +196,13 @@ module.exports = {
'Google storage'
]
},
+ Batch_Run: {
+ Tab_List: ['Functions', 'Hub'],
+ Data_Inputs_Table_Header: ['Input name', 'Path'],
+ Parameters_Table_Header: ['Name', 'Type', 'Value'],
+ Parameters_Table_Header_Hyper: ['Hyper','Name', 'Type', 'Value'],
+ Image_Name_Text: 'The image must include all the software packages that are required to run the function. For example, for an XGBoost model, ensure that the image includes the correct XGboost package and version'
+ },
Register_Artifact: {
Type_Options: ['General', 'Chart', 'Plot', 'Table'],
Form_Text:
@@ -207,7 +215,16 @@ module.exports = {
Form_Text:
/This dialog enable users to register an artifact( as a dataset)? in Iguazio database\. Once (a artifact|the dataset) is registered it can be consumed by jobs and workflows\./,
Form_Subtext:
- 'All you need to do is enter the name of the dataset and the URL (e.g. s3://my-bucket/path).'
+ 'All you need to do is enter the name of the dataset and the URL (e.g. s3://my-bucket/path).',
+ Combobox_Options: [
+ 'V3IO',
+ 'S3',
+ 'HTTP',
+ 'HTTPS',
+ 'Azure storage',
+ 'Google storage',
+ 'Databricks filesystem'
+ ]
},
Project_Settings: {
Tab_List: ['General', 'Members', 'Secrets'],
@@ -218,12 +235,21 @@ module.exports = {
Artifact_Names_Unique: 'Artifact names in the same project must be unique',
Artifacts_Names_Unique: 'Artifacts names in the same project must be unique.',
Dataset_Names_Unique: 'Dataset names in the same project must be unique',
+ Artifact_Name_Hint_Deploy_Model:
+ 'Valid characters: a–z, A–Z, 0–9, –, _, .\nMust begin and end with: a–z, A–Z, 0–9\nLength – max: 253\n' +
+ 'This field is required',
Artifact_Name_Hint:
'Valid characters: a–z, A–Z, 0–9, –, _, .\nMust begin and end with: a–z, A–Z, 0–9\nLength – max: 253\n' +
'This field is required\nArtifact name should be unique',
Project_Name_Hint:
'Valid characters: a–z, 0–9, –\nMust begin with: a–z\nMust end with: a–z, 0–9\nLength – max: 63\n' +
'This field is required',
+ Function_Name_Batch_Run_Hint:
+ 'Valid characters: a–z, A–Z, 0–9, –, _, .\nMust begin and end with: a–z, A–Z, 0–9\nLength – max: 63\n' +
+ 'This field is required',
+ Labels_Warning_Key: 'Valid characters: a–z, A–Z, 0–9, –, _, .\nMust begin and end with: a–z, A–Z, 0–9\nLength – max: 56\n' +
+ 'Key should be unique',
+ Labels_Warning_Value: 'Valid characters: a–z, A–Z, 0–9, –, _, .\nMust begin and end with: a–z, A–Z, 0–9\nLength – max: 56',
Feature_Set_Name_Hint:
'Valid characters: a–z, A–Z, 0–9, –, _, .\nMust begin and end with: a–z, A–Z, 0–9\nLength – max: 56\n' +
'This field is required',
@@ -241,7 +267,7 @@ module.exports = {
'better performance. In this case the path would be path/bucket-num/year=/month=/day= etc.. In case the ' +
'value is 0 then no bucketing will be done and your data will be partitioned by key.',
Function_Name_Hint:
- 'Valid characters: a–z, A–Z, 0–9, –, _, .\nMust begin and end with: a–z, A–Z, 0–9\nLength – max: 63\n' +
+ 'Valid characters: a–z, 0–9, –, .\nMust begin and end with: a–z, 0–9\nLength – max: 63\n' +
'This field is required',
Function_Tag_Hint:
'Valid characters: a–z, A–Z, 0–9, –, _, .\nMust begin and end with: a–z, A–Z, 0–9\nLength – max: 56',
@@ -252,6 +278,7 @@ module.exports = {
Base_Image_Hint:
"The name of a base container image from which to build the function's processor image",
Limit_Number_Warning: 'Limit must be bigger than or equal to Request and not be less than 1',
+ Minimum_Value_Warning: 'The minimum value should be 1',
CPU_Limit_Number_Warning:
'Limit must be bigger than or equal to Request and not be less than 0.001',
Request_Number_Warning: 'Request must be less than or equal to Limit and not be less than 1',
@@ -274,13 +301,13 @@ module.exports = {
MLRun_Store_Path_Hint: 'Field must be in "artifacts/my-project/my-artifact:my-tag" format',
Jobs_MLRun_Store_Path_Hint:
'Field must be in "artifacts/my-project/my-artifact:my-tag" or "artifacts/my-project/my-artifact@my-uid" format',
- V3IO_Path_Hint: 'Field must be in "container-name/file" format',
+ V3IO_Path_Hint: 'Invalid URL. Field must be in "container-name/file" format',
S3_Path_Hint: 'Field must be in "bucket/path" format',
Azure_Storage_Path_Hint: 'Field must be in "container/path" format',
Timestamp_Column: 'The field name for filtering the source data.',
Start_Time_Input: 'Filter data by start date >= value',
End_Time_Input: 'Filter data by start date <= value',
- Target_Store_Online: 'Store the feature set in Iguazio NoSQL database',
+ Target_Store_Online: 'Store the feature set in a NoSQL database',
Target_Store_Offline: 'Store the feature set as a Parquet file or a partitioned Parquet directory',
Target_Store_External_Offline:
'Store the feature set in a remote object store (e.g. AWS S3 Google or Azure storage)',
@@ -366,7 +393,9 @@ module.exports = {
Projects_Limit_Reached:
'Cannot create more than 200 projects due to resource limitation. Either delete existing projects or contact our customer support for assistance',
Must_Select_One: 'Must select at least one',
- Already_Scheduled: 'This job is already scheduled'
+ Must_Select_One_Partition: 'Must select at least one partitioning option',
+ Already_Scheduled: 'This job is already scheduled',
+ One_Day_Option: 'Must select at least one day option'
},
Dropdown_Options: {
Tag_Filer_Options: ['All', 'latest'],
@@ -386,6 +415,7 @@ module.exports = {
Turning_Strategy_Options: ['List', 'Grid', 'Random'],
Criteria_Dropdown_Options: ['Max', 'Min'],
Volume_Mount_Options: ['Auto', 'Manual', 'None'],
+ Hyperparameter_Strategy_Options: ['List', 'Grid', 'Random'],
Memory_Unit_Options: [
'Bytes',
'KB',
@@ -395,13 +425,12 @@ module.exports = {
'GB',
'GiB',
'TB',
- 'TiB',
- 'PB',
- 'PiB',
- 'EB',
- 'EiB'
+ 'TiB'
],
CPU_Unit_Options: ['cpu', 'millicpu'],
+ Time_Unit_Options: ['Minute', 'Hourly', 'Daily', 'Weekly', 'Monthly'],
+ Minute_Intervals_Dropdown_Options: ['Every 10', 'Every 15', 'Every 20', 'Every 30'],
+ Hour_Intervals_Dropdown_Options: ['Every 1', 'Every 2', 'Every 3', 'Every 4', 'Every 6', 'Every 12'],
Partition_Granularity_Options: ['Second', 'Minute', 'Hour', 'Day', 'Month', 'Year'],
Pods_Priority: ['Low', 'Medium', 'High'],
//Pods_Toleration: ['Allow', 'Constrain', 'Prevent'], - Pods_Toleration is deleted from implementation
@@ -416,6 +445,9 @@ module.exports = {
Common_Message_Feature_Sets: 'There is no Feature-Sets data to show for "Version Tag: latest"',
No_Data: 'No data to show',
No_Features_Yet: 'No features yet. Go to "Feature Sets" tab to create your first Feature Set.',
- No_Consumer_Group_Yet: 'You haven’t created any consumer group yet'
+ No_Consumer_Group_Yet: 'You haven’t created any consumer group yet',
+ No_Datasets_data: 'There is no Datasets data to show for "Version tag: latest, Labels: v3io_user=123, Show best iteration only: true"',
+ No_Files_data: 'There is no Files data to show for "Version tag: latest, Labels: v3io_user=123, Show best iteration only: true"',
+ No_Models_data: 'There is no Models data to show for "Version tag: latest, Labels: MY-KEY, Show best iteration only: true"'
}
}
diff --git a/tests/features/common-tools/common-tools.js b/tests/features/common-tools/common-tools.js
index dee6c2494..b93a362bb 100644
--- a/tests/features/common-tools/common-tools.js
+++ b/tests/features/common-tools/common-tools.js
@@ -78,9 +78,9 @@ module.exports = {
structure.elements.hint = typeof hint === 'string' ? hint : '.tip-container svg'
}
if (warning) {
- structure.elements.warningHint = '.range__warning svg'
+ structure.elements.warningHint = typeof warning === 'string' ? warning : '.range__warning svg'
structure.elements.warningText = '.tooltip .tooltip__text'
- }
+ }
return structure
},
diff --git a/tests/features/common/actions/api.actions.js b/tests/features/common/actions/api.actions.js
index 30d6ec07b..f6e2b5b38 100644
--- a/tests/features/common/actions/api.actions.js
+++ b/tests/features/common/actions/api.actions.js
@@ -279,19 +279,31 @@ const action = {
expectedStatusCode
) {
const uid = uuidv4()
+ //TODO: description ML-4583
+ // const data = {
+ // description: '',
+ // }
+
const data = {
- uid: uid,
- key: mlArtifactName,
- db_key: mlArtifactName,
- tree: uid,
- description: '',
kind: mlArtifactType === 'file' ? '' : mlArtifactType,
+ metadata: {
+ labels:{},
+ key: mlArtifactName,
+ project: mlProjectName,
+ tree: uid,
+ tag: mlArtifactTag
+ },
project: mlProjectName,
- producer: {
- kind: 'api',
- uri: 'localhost:3000'
+ spec: {
+ db_key: mlArtifactName,
+ producer: {
+ kind: 'api',
+ uri: 'localhost:3000'
+ },
+ target_path:{}
},
- tag: mlArtifactTag
+ status: {},
+ uid: uid
}
if (mlArtifactType === 'model') {
@@ -314,7 +326,8 @@ const action = {
await mainHttpClient
.post(
- `${REACT_APP_MLRUN_API_URL}/artifact/${mlProjectName}/${uid}/${mlArtifactName}`,
+ //`${REACT_APP_MLRUN_API_URL}/artifact/${mlProjectName}/${uid}/${mlArtifactName}`,
+ `${REACT_APP_MLRUN_API_URL}/projects//${mlProjectName}/artifacts/${uid}/${mlArtifactName}`,
data
)
.then(res => {
diff --git a/tests/features/common/actions/checkbox.action.js b/tests/features/common/actions/checkbox.action.js
index 693e7acbe..aceab8a50 100644
--- a/tests/features/common/actions/checkbox.action.js
+++ b/tests/features/common/actions/checkbox.action.js
@@ -43,6 +43,16 @@ const action = {
if (!classes.includes('unchecked')) {
await checkboxElement.click()
}
+ },
+ verifyCheckboxEnabled: async function(driver, component) {
+ const element = await driver.findElement(component)
+ const flag = await element.getAttribute('class')
+ expect(flag).equal('checkbox')
+ },
+ verifyCheckboxDisabled: async function(driver, component) {
+ const element = await driver.findElement(component)
+ const flag = await element.getAttribute('class')
+ expect(flag).equal('checkbox checkbox_disabled')
}
}
diff --git a/tests/features/common/actions/common.action.js b/tests/features/common/actions/common.action.js
index 29615b0b2..fa249dc0c 100644
--- a/tests/features/common/actions/common.action.js
+++ b/tests/features/common/actions/common.action.js
@@ -20,6 +20,9 @@ such restriction.
import { timeout } from '../../../config'
import { until } from 'selenium-webdriver'
import { expect } from 'chai'
+import { access, constants } from 'fs'
+const path = require('path')
+const os = require('os')
async function scrollToWebElement(driver, element) {
await driver.executeScript('arguments[0].scrollIntoView()', element)
@@ -27,6 +30,21 @@ async function scrollToWebElement(driver, element) {
}
const action = {
+ generatePath: async function(file, downloadsFolder){
+ const homeDirectory = os.homedir()
+
+ // Define the path to the Downloads folder
+ const downloadsFolderPath = path.join(homeDirectory, downloadsFolder)
+
+ // Specify the full path to the file
+ return path.join(downloadsFolderPath, file)
+ },
+ determineFileAccess: async function(finalPath, file){
+ access(finalPath, constants.F_OK, (err) => {
+ const result = err ? `${file} doesn't exist` : true
+ expect(result).equal(true)
+ })
+ },
navigateToPage: async function(driver, baseURL) {
await driver.get(baseURL)
await driver.sleep(1000)
@@ -85,6 +103,16 @@ const action = {
const flag = await element.getAttribute('disabled')
expect(flag).equal(null)
},
+ verifyElementActive: async function(driver, component) {
+ const element = await driver.findElement(component)
+ const flag = await element.getAttribute('class')
+ expect(flag.includes('active')).equal(true)
+ },
+ verifyElementNotActive: async function(driver, component) {
+ const element = await driver.findElement(component)
+ const flag = await element.getAttribute('class')
+ expect(flag.includes('false')).equal(true)
+ },
componentIsPresent: async function(driver, component) {
const _component = component.root ?? component
const elements = await driver.findElements(_component)
@@ -110,7 +138,7 @@ const action = {
},
typeIntoInputField: async function(driver, component, value) {
const element = await driver.findElement(component)
- return element.sendKeys(value)
+ return element.sendKeys(value)
},
verifyTypedText: async function(driver, component, value) {
const element = await driver.findElement(component)
@@ -120,10 +148,19 @@ const action = {
verifyText: async function(driver, component, value) {
const element = await driver.findElement(component)
const txt = await element.getText('value')
- expect(txt).equal(
- value,
- `should be expected "${value}" but actual value "${txt}"`
- )
+ const arr = txt.split('\n')
+ if (arr.length > 1) {
+ expect(arr.some(item => item.includes(value))).equal(
+ true,
+ `should be expected "${value}" but actual value [${arr}]`
+ )
+ }
+ else {
+ expect(txt).equal(
+ value,
+ `should be expected "${value}" but actual value "${txt}"`
+ )
+ }
},
verifyTextRegExp: async function(driver, component, regexp) {
const element = await driver.findElement(component)
diff --git a/tests/features/common/actions/input-group.action.js b/tests/features/common/actions/input-group.action.js
index 990d27acd..db3282742 100644
--- a/tests/features/common/actions/input-group.action.js
+++ b/tests/features/common/actions/input-group.action.js
@@ -58,16 +58,29 @@ async function getInputValue(driver, inputGroup) {
return inputField.getAttribute('value')
}
+async function getInputValueWithoutInputgroup(driver, input) {
+ const inputField = await driver.findElement(input)
+ return inputField.getAttribute('value')
+}
+
async function typeValue(driver, inputGroup, value) {
const inputField = await driver.findElement(inputGroup.inputField)
await clearManually(inputField)
return inputField.sendKeys(value)
}
+async function typeValueWithoutInputgroup(driver, input, value) {
+ const inputField = await driver.findElement(input)
+ await clearManually(inputField)
+ return inputField.sendKeys(value)
+}
+
const action = {
clearManually,
getInputValue,
+ getInputValueWithoutInputgroup,
typeValue,
+ typeValueWithoutInputgroup,
verifyInputValid,
verifyInputInvalid,
checkHintText: async function (driver, inputGroup, hintComponent, text) {
@@ -123,7 +136,12 @@ const action = {
checkWarningHintText: async function (driver, inputGroup, hintComponent, text) {
const hintButton = await driver.findElement(inputGroup.warningHint)
await hintButton.click()
- // await hoverComponent(driver, inputGroup.warningHint)
+ const hint = await driver.findElement(hintComponent)
+ await driver.sleep(250)
+ const hintText = await hint.getText()
+ expect(hintText).equal(text)
+ },
+ checkWarningText: async function (driver, hintComponent, text) {
const hint = await driver.findElement(hintComponent)
await driver.sleep(250)
const hintText = await hint.getText()
@@ -133,11 +151,27 @@ const action = {
const txt = await getInputValue(driver, inputGroup)
expect(txt).equal(value)
},
+ verifyTypedValueWithoutInputgroup: async function (driver, input, value) {
+ const txt = await getInputValueWithoutInputgroup(driver, input)
+ expect(txt).equal(value)
+ },
verifyInputDisabled: async function (driver, inputGroup) {
const inputField = await driver.findElement(inputGroup.inputField)
const flag = await inputField.getAttribute('disabled')
expect(flag).equal('true')
},
+ verifyInputClassDisabled: async function (driver, inputGroup) {
+ const inputField = await driver.findElement(inputGroup.root)
+ const attributes = await inputField.getAttribute('class')
+ const flag = attributes.includes('form-field__wrapper-disabled')
+ expect(flag).equal(true)
+ },
+ verifyInputClassEnabled: async function (driver, inputGroup) {
+ const inputField = await driver.findElement(inputGroup.inputField)
+ const attributes = await inputField.getAttribute('class')
+ const flag = attributes.includes('form-field__wrapper-disabled')
+ expect(flag).equal(false)
+ },
verifyInputEnabled: async function (driver, inputGroup) {
const inputField = await driver.findElement(inputGroup.inputField)
const flag = await inputField.getAttribute('disabled')
diff --git a/tests/features/common/actions/table.action.js b/tests/features/common/actions/table.action.js
index df150dfef..e7e1233ee 100644
--- a/tests/features/common/actions/table.action.js
+++ b/tests/features/common/actions/table.action.js
@@ -37,6 +37,15 @@ async function getColumnValues(driver, table, columnName) {
})
}
+async function getColumnValuesAttribute(driver, table, columnName) {
+ return await driver
+ .findElements(table.tableColumns[columnName])
+ .then(function(elements) {
+
+ return Promise.all(elements.map(element => element.getAttribute('value')))
+ })
+}
+
async function getTableRows(driver, table) {
const arr = await driver
.findElements(table.tableColumns[table.tableCulumnNames[0]])
@@ -71,6 +80,19 @@ const action = {
`Value "${value}" does not includes in all values: [${arr}]`
)
},
+ isContainsSubstringInColumnAttributrCells: async function(
+ driver,
+ table,
+ columnName,
+ value
+ ) {
+ const arr = await getColumnValuesAttribute(driver, table, columnName)
+ expect(arr.length > 0).equal(true)
+ expect(arr.every(item => item.includes(value))).equal(
+ true,
+ `Value "${value}" does not includes in all values: [${arr}]`
+ )
+ },
isContainsSubstringInColumnDropdownCells: async function(
driver,
table,
@@ -100,6 +122,36 @@ const action = {
expect(flag).equal(true)
},
+ isContainsSubstringInColumnDropdownCellsOverlay: async function(
+ driver,
+ table,
+ overlay,
+ column,
+ value
+ ) {
+ const subString = value.replace('=', '\n:\n')
+ const rows = await getTableRows(driver, table)
+ let flag = true
+
+ expect(rows).not.equal(0)
+
+ for (let i = 1; i <= rows; i++) {
+ await openDropdown(driver, table.tableFields[column](i))
+ const optionsRow = await getOptionValues(
+ driver,
+ table.tableFields[column](i).options
+ )
+ const optionsOverlay = await getOptionValues(
+ driver,
+ overlay
+ )
+ const options = optionsRow.concat(optionsOverlay)
+
+ flag = flag && options.some(item => item.includes(subString))
+ }
+
+ expect(flag).equal(true)
+ },
isContainsSubstringInColumnTooltipCells: async function(
driver,
table,
@@ -167,6 +219,22 @@ const action = {
}
return indexes
},
+ findRowIndexesByColumnValueAttribute: async function(
+ driver,
+ table,
+ columnName,
+ value
+ ) {
+ const arr = await getColumnValuesAttribute(driver, table, columnName)
+ const indexes = []
+
+ for (let indx in arr) {
+ if (arr[indx] === value) {
+ indexes.push(parseInt(indx) + 1)
+ }
+ }
+ return indexes
+ },
findRowIndexesByColumnTooltipsValue: async function(
driver,
table,
@@ -239,6 +307,12 @@ const action = {
},
checkTableColumnValues: async function(driver, table, columnName, values) {
const arr = await getColumnValues(driver, table, columnName)
+ if (arr.length === 0) {
+ expect(arr.length > 0).equal(
+ true,
+ 'Array is empty, nothing to compare'
+ )
+ }
const diff = differenceWith(arr, values, isEqual)
expect(diff.length).equal(
diff --git a/tests/features/common/components/combo-box.component.js b/tests/features/common/components/combo-box.component.js
index fb6bdbd4a..b423b30b3 100644
--- a/tests/features/common/components/combo-box.component.js
+++ b/tests/features/common/components/combo-box.component.js
@@ -21,36 +21,66 @@ import { By } from 'selenium-webdriver'
import dropdownComponent from './dropdown.component'
import { generateDropdownGroup } from '../../common-tools/common-tools'
-module.exports = function(comboBoxRoot) {
+module.exports = function(comboBoxRoot, newClassLocator = false) {
const element = {}
element.root = By.css(comboBoxRoot)
- element.dropdown = dropdownComponent(
- generateDropdownGroup(
- `${comboBoxRoot} .combobox-select`,
- '.combobox-select__header',
- '.combobox-select__body .combobox-list .combobox-list__option',
- '',
- true
+ if (newClassLocator){
+ element.dropdown = dropdownComponent(
+ generateDropdownGroup(
+ `${comboBoxRoot} .form-field-combobox__select`,
+ '.form-field-combobox__select-header',
+ '.form-field-combobox__dropdown .form-field-combobox__dropdown-list-option',
+ '',
+ false
+ )
)
- )
-
- element.comboDropdown = dropdownComponent(
- generateDropdownGroup(
- `${comboBoxRoot} .combobox-dropdown`,
- '.combobox-input',
- '.combobox-dropdown__list .combobox-list__option',
- '',
- true
+
+ element.comboDropdown = dropdownComponent(
+ generateDropdownGroup(
+ `${comboBoxRoot} .combobox-dropdown`,
+ '.combobox-input',
+ '.combobox-dropdown__list .combobox-list__option',
+ '',
+ true
+ )
+ )
+ element.comboDropdown.inputField = By.css(
+ `${comboBoxRoot} .combobox-dropdown__search-input`
+ )
+
+ element.inputField = By.css(`${comboBoxRoot} .form-field-combobox__input`)
+ element.warningHint = By.css(`${comboBoxRoot} .form-field__warning`)
+ element.warningText = By.css('.tooltip__warning')
+ }
+ else{
+ element.dropdown = dropdownComponent(
+ generateDropdownGroup(
+ `${comboBoxRoot} .combobox-select`,
+ '.combobox-select__header',
+ '.combobox-select__body .combobox-list .combobox-list__option',
+ '',
+ true
+ )
+ )
+
+ element.comboDropdown = dropdownComponent(
+ generateDropdownGroup(
+ `${comboBoxRoot} .combobox-dropdown`,
+ '.combobox-input',
+ '.combobox-dropdown__list .combobox-list__option',
+ '',
+ true
+ )
+ )
+ element.comboDropdown.inputField = By.css(
+ `${comboBoxRoot} .combobox-dropdown__search-input`
)
- )
- element.comboDropdown.inputField = By.css(
- `${comboBoxRoot} .combobox-dropdown__search-input`
- )
-
- element.inputField = By.css(`${comboBoxRoot} .combobox-input`)
- element.warningHint = By.css(`${comboBoxRoot} .combobox-warning`)
- element.warningText = By.css('.tooltip__warning')
+
+ element.inputField = By.css(`${comboBoxRoot} .combobox-input`)
+ element.warningHint = By.css(`${comboBoxRoot} .combobox-warning`)
+ element.warningText = By.css('.tooltip__warning')
+ }
return element
}
diff --git a/tests/features/common/page-objects.js b/tests/features/common/page-objects.js
index a32aca114..542644a12 100644
--- a/tests/features/common/page-objects.js
+++ b/tests/features/common/page-objects.js
@@ -36,6 +36,9 @@ module.exports = {
Analysis_Info_Pane: infoPane['analysisInfoPane'],
Artifact_Preview_Popup: interactivePopup['artifactPreviewPopup'],
Artifacts_Info_Pane: infoPane['artifactsInfoPane'],
+ Batch_Run: jobsAndWorkflows['BatchRun'],
+ Batch_Run_Edit: sidePanel['batchRunEdit'],
+ Batch_Inference: project['batchInference'],
Change_Project_Owner_Popup: interactivePopup['changeProjectOwnerPopup'],
Common_Popup: interactivePopup['commonPopup'],
Consumer_Groups: project['consumerGroups'],
diff --git a/tests/features/common/page-objects/feature-store.po.js b/tests/features/common/page-objects/feature-store.po.js
index 1db7849ce..1c5b04205 100644
--- a/tests/features/common/page-objects/feature-store.po.js
+++ b/tests/features/common/page-objects/feature-store.po.js
@@ -268,7 +268,7 @@ const featuresByProjectsTable = {
// Datasets
const datasetsTable = {
- root: '.table-container .table__flex .table__content',
+ root: '.table-container .table__content',
header: {
root: '.table-head',
sorters: {
@@ -281,15 +281,17 @@ const datasetsTable = {
root: '.table-row',
fields: {
name: '.table-body__cell:nth-of-type(1) a .link',
+ tag: '.table-body__cell:nth-of-type(1) a .item-tag',
+ name_expand_btn: '.table-body__cell:nth-of-type(1) a .name-wrapper .item-tag',
expand_btn: '.table-body__cell:nth-of-type(1) svg.expand-arrow',
labels: {
componentType: dropdownComponent,
structure: generateDropdownGroup(
'.table-body__cell:nth-of-type(2)',
'.chip-block span.chips_button',
- '.chip-block .chip-block-hidden_visible .data-ellipsis.tooltip-wrapper',
+ '.chip-block-hidden_visible .data-ellipsis.tooltip-wrapper',
false,
- true
+ false
)
},
producer: '.table-body__cell:nth-of-type(3) .data-ellipsis a.link',
@@ -314,6 +316,14 @@ const tableRefreshButton = By.css('.content__action-bar-wrapper .action-bar #ref
const tableFilterByButton = By.css('.content .content__action-bar-wrapper .action-bar__filters .filters-button button')
const pageHeaderButton = By.css('.content__header .page-actions-container button')
const commonNameFilterInput = inputGroup(
+ generateInputGroup(
+ '.content .content__action-bar-wrapper .action-bar .filters .input-wrapper:nth-of-type(2)',
+ true,
+ false,
+ true
+ )
+)
+const commonNameFilterInputDataset = inputGroup(
generateInputGroup(
'.content .content__action-bar-wrapper .action-bar__filters .name-filter',
true,
@@ -350,7 +360,8 @@ module.exports = {
Table_Name_Filter_Input: commonNameFilterInput,
Table_Label_Filter_Input: commonLabelFilterInput,
Feature_Sets_Table: commonTable(featureSetsTable),
- Feature_Store_Tab_Selector: featureStoreTabSelector
+ Feature_Store_Tab_Selector: featureStoreTabSelector,
+ Overlay: By.css('#overlay_container .chip-block-hidden_visible')
},
featuresTab: {
Feature_Store_Tab_Selector: featureStoreTabSelector,
@@ -375,7 +386,7 @@ module.exports = {
datasets: {
Feature_Store_Tab_Selector: featureStoreTabSelector,
Register_Dataset_Button: pageHeaderButton,
- Table_Name_Filter_Input: commonNameFilterInput,
+ Table_Name_Filter_Input: commonNameFilterInputDataset,
Table_FilterBy_Button: tableFilterByButton,
Table_Refresh_Button: tableRefreshButton,
Datasets_Table: commonTable(datasetsTable),
diff --git a/tests/features/common/page-objects/files.po.js b/tests/features/common/page-objects/files.po.js
index b52e314aa..9b24752b2 100644
--- a/tests/features/common/page-objects/files.po.js
+++ b/tests/features/common/page-objects/files.po.js
@@ -19,12 +19,9 @@ such restriction.
*/
import { By } from 'selenium-webdriver'
import inputGroup from '../components/input-group.component'
-import {
- generateInputGroup,
- generateDropdownGroup
-} from '../../common-tools/common-tools'
+import { generateInputGroup, generateDropdownGroup } from '../../common-tools/common-tools'
import dropdownComponent from '../components/dropdown.component'
-import checkboxComponent from '../components/checkbox.component'
+//import checkboxComponent from '../components/checkbox.component'
import commonTable from '../components/table.component'
import actionMenu from '../components/action-menu.component'
@@ -37,7 +34,7 @@ const actionMenuStructure = {
}
const filesTable = {
- root: '.table-container .table__flex .table__content',
+ root: '.table-container .table__content',
header: {
root: '.table-head',
sorters: {
@@ -55,7 +52,9 @@ const filesTable = {
row: {
root: '.table-row',
fields: {
- name: '.table-body__cell:nth-of-type(1) a .name-wrapper .link', //span',
+ name: '.table-body__cell:nth-of-type(1) a .name-wrapper .link',
+ tag: '.table-body__cell:nth-of-type(1) a .item-tag',
+ name_expand_btn: '.table-body__cell:nth-of-type(1) a .name-wrapper .item-tag',
expand_btn: '.table-body__cell:nth-of-type(1) svg.expand-arrow',
type: '.table-body__cell:nth-of-type(2) .data-ellipsis',
labels: {
@@ -63,9 +62,9 @@ const filesTable = {
structure: generateDropdownGroup(
'.table-body__cell:nth-of-type(3)',
'.chip-block span.chips_button',
- '.chip-block .chip-block-hidden_visible .data-ellipsis.tooltip-wrapper',
+ '.chip-block-hidden_visible .data-ellipsis.tooltip-wrapper',
false,
- true
+ false
)
},
producer: '.table-body__cell:nth-of-type(4) .data-ellipsis a',
@@ -86,39 +85,19 @@ const filesTable = {
module.exports = {
filesTab: {
- Table_Tree_Filter_Dropdown: dropdownComponent(
- generateDropdownGroup(
- '.content .content__action-bar .filters .tag-filter',
- 'input',
- '.tag-filter__dropdown .tag-filter__dropdown-item',
- '',
- true
- )
- ),
Table_Name_Filter_Input: inputGroup(
generateInputGroup(
'.content .content__action-bar-wrapper .action-bar__filters .name-filter',
true
)
),
- Table_Label_Filter_Input: inputGroup(
- generateInputGroup(
- '.content .content__action-bar .input-wrapper:nth-of-type(3)',
- true
- )
- ),
- Show_Iterations_Checkbox: checkboxComponent({
- root: '.content .content__action-bar .filters .checkbox',
- elements: {
- checkbox: 'svg[class]',
- name: '',
- icon: ''
- }
- }),
Table_Refresh_Button: By.css(
'.content .content__action-bar-wrapper .action-bar__actions #refresh'
),
Files_Table: commonTable(filesTable),
- Register_File_Button: By.css('.page-actions-container .btn_register')
+ Register_File_Button: By.css('.page-actions-container .btn_register'),
+ Table_FilterBy_Button: By.css(
+ '.content .content__action-bar-wrapper .action-bar__filters .filters-button button'
+ )
}
}
diff --git a/tests/features/common/page-objects/info-pane.po.js b/tests/features/common/page-objects/info-pane.po.js
index 276532388..b3f1d881a 100644
--- a/tests/features/common/page-objects/info-pane.po.js
+++ b/tests/features/common/page-objects/info-pane.po.js
@@ -48,7 +48,7 @@ const infoPaneTabSelector = {
row: {
root: 'a',
fields: {
- key: '', //'.details-menu__tab',
+ key: '',
hintButton: '.tip-container'
}
}
@@ -56,7 +56,7 @@ const infoPaneTabSelector = {
}
const infoPaneOverviewHeaders = {
- root: '.table__item .item-info__details:nth-of-type(1)',
+ root: '.table__item .item-info__details-wrapper:nth-of-type(1)',
header: {},
body: {
row: {
@@ -140,7 +140,7 @@ const functionsOverviewTable = {
}
const infoPaneDriftHeaders = {
- root: '.table__item .item-info__details:nth-of-type(2)',
+ root: '.table__item .item-info__details-wrapper:nth-of-type(2)',
header: {},
body: {
row: {
@@ -453,11 +453,26 @@ const cancelButton = By.css(
const applyChangesButton = By.css(
'.table__item .item-header__buttons > .data-ellipsis:nth-of-type(1) button'
)
+const applyButton = By.css('.item-info__details .round-icon-cp:nth-of-type(2) button')
const commonActionMenu = actionMenu(actionMenuStructure)
+const fullViewButton = By.css('.table__item .item-header__buttons .item-header__navigation-buttons > div > div')
+const tabelViewButton = By.css('#main-wrapper .table__item_big .item-header__navigation-buttons')
const crossCloseButton = By.css('.table__item .item-header__buttons a .data-ellipsis')
const commonDownloadButton = By.css('.table__item .item-header__buttons .download-container')
const commonArrowBack = By.css('a.link-back__icon')
const commonInfoPaneTabSelector = commonTable(infoPaneTabSelector)
+const commonEditBtnTableView = By.css('[data-testid="detailsPanel"] .details-item__data-btn-edit')
+const commonEditBtnFullView = By.css('.table__item_big .details-item__data-btn-edit')
+const commonVersionTagInputTableView = By.css('.details-item:nth-of-type(3) .details-item__input-wrapper input')
+const commonVersionTagInputPlaceholder = By.css('.details-item:nth-of-type(3) .details-item__data-add-placeholder')
+const commonVersionTagInput = inputGroup(
+ generateInputGroup(
+ '.details-item:nth-of-type(3) .details-item__input-wrapper',
+ false,
+ false
+ )
+)
+const commonVersionTagInputFullView = By.css('.table__item_big .details-item__input-wrapper input')
module.exports = {
featureSetsInfoPane: {
@@ -504,8 +519,11 @@ module.exports = {
Updated: updated,
Cancel_Button: cancelButton,
Apply_Changes_Button: applyChangesButton,
+ Apply_Button: applyButton,
Download_Button: commonDownloadButton,
Action_Menu: commonActionMenu,
+ Full_View_Button: fullViewButton,
+ Tabel_View_Button: tabelViewButton,
Cross_Close_Button: crossCloseButton,
Info_Pane_Tab_Selector: commonInfoPaneTabSelector,
Overview_General_Headers: commonTable(infoPaneOverviewHeaders),
@@ -525,7 +543,13 @@ module.exports = {
),
Expand_Sources: By.css('.details-item .info-sources'),
Info_Sources_Table: commonTable(filesInfoSourcesTable),
- Overview_Table: commonTable(artifactOverviewTable)
+ Overview_Table: commonTable(artifactOverviewTable),
+ Edit_btn_table_view: commonEditBtnTableView,
+ Edit_btn_full_view: commonEditBtnFullView,
+ Version_tag_Input_table_view: commonVersionTagInputTableView,
+ Version_tag_Input_full_view: commonVersionTagInputFullView,
+ Version_Tag_Input_Placeholder: commonVersionTagInputPlaceholder,
+ Version_tag_Input: commonVersionTagInput
},
transformationsInfoPane: {
Header: header,
@@ -621,7 +645,11 @@ module.exports = {
Updated: updated,
Download_Button: commonDownloadButton,
Action_Menu: commonActionMenu,
+ Apply_Changes_Button: applyChangesButton,
+ Apply_Button: applyButton,
Cross_Close_Button: crossCloseButton,
+ Full_View_Button: fullViewButton,
+ Tabel_View_Button: tabelViewButton,
Info_Pane_Tab_Selector: commonInfoPaneTabSelector,
Overview_General_Headers: commonTable(infoPaneOverviewHeaders),
Overview_Hash_Header: labelComponent(
@@ -640,7 +668,13 @@ module.exports = {
),
Expand_Sources: By.css('.details-item .info-sources'),
Info_Sources_Table: commonTable(filesInfoSourcesTable),
- Overview_Table: commonTable(artifactOverviewTable)
+ Overview_Table: commonTable(artifactOverviewTable),
+ Edit_btn_table_view: commonEditBtnTableView,
+ Edit_btn_full_view: commonEditBtnFullView,
+ Version_tag_Input_table_view: commonVersionTagInputTableView,
+ Version_tag_Input_full_view: commonVersionTagInputFullView,
+ Version_Tag_Input_Placeholder: commonVersionTagInputPlaceholder,
+ Version_tag_Input: commonVersionTagInput
},
modelsInfoPane: {
Header: header,
@@ -648,7 +682,10 @@ module.exports = {
Download_Button: commonDownloadButton,
Action_Menu: commonActionMenu,
Apply_Changes_Button: applyChangesButton,
+ //Apply_Button: applyButton,
Cross_Close_Button: crossCloseButton,
+ Full_View_Button: fullViewButton,
+ Tabel_View_Button: tabelViewButton,
Info_Pane_Tab_Selector: commonInfoPaneTabSelector,
Overview_General_Headers: commonTable(infoPaneOverviewHeaders),
Overview_Drift_Headers: commonTable(infoPaneDriftHeaders),
@@ -673,7 +710,13 @@ module.exports = {
'.item-info__details .details-item:nth-of-type(2) .button-add-density_dense'
),
Labels_Table: commonTable(featureSetsInfoPaneLabelsTable),
- Apply_Button: By.css('.item-info__details .details-item__apply-btn')
+ Apply_Button: By.css('.item-info__details .round-icon-cp:nth-of-type(2) button'),
+ Edit_btn_table_view: commonEditBtnTableView,
+ Edit_btn_full_view: commonEditBtnFullView,
+ Version_tag_Input_table_view: commonVersionTagInputTableView,
+ Version_tag_Input_full_view: commonVersionTagInputFullView,
+ Version_Tag_Input_Placeholder: commonVersionTagInputPlaceholder,
+ Version_tag_Input: commonVersionTagInput
},
modelsRealTimePipelineInfoPane: {
Arrow_Back: commonArrowBack,
diff --git a/tests/features/common/page-objects/interactive-popup.po.js b/tests/features/common/page-objects/interactive-popup.po.js
index 1b41d7625..6bf4e57de 100644
--- a/tests/features/common/page-objects/interactive-popup.po.js
+++ b/tests/features/common/page-objects/interactive-popup.po.js
@@ -23,6 +23,7 @@ import commonTable from '../components/table.component'
import labelComponent from '../components/label.component'
import checkboxComponent from '../components/checkbox.component'
import textAreaGroup from '../components/text-area.component'
+import comboBox from '../components/combo-box.component'
import {
generateLabelGroup,
@@ -190,7 +191,7 @@ const commonTargetPathInput = generateInputGroup(
)
const commonDescriptionTextArea = generateTextAreaGroup(
- '.form .form-row:nth-of-type(4) .form-field-textarea',
+ '.form .form-row:nth-of-type(3) .form-field-textarea',
'.form-field__counter'
)
@@ -217,8 +218,8 @@ const commonLabelFilterInput = inputGroup(
const commonTableTreeFilterDropdown = dropdownComponent(
generateDropdownGroup(
'#overlay_container .form-tag-filter .form-tag-filter__input-wrapper',
- '.tag-filter__dropdown-button',
- '.tag-filter__dropdown .tag-filter__dropdown-item'
+ '.form-tag-filter__dropdown-button',
+ '.form-tag-filter__dropdown .form-tag-filter__dropdown-item'
)
)
@@ -255,7 +256,12 @@ module.exports = {
Form_Subtext: commonFormSubtext,
Cross_Cancel_Button: commonCloseButton,
Name_Input: inputGroup(commonNameInput),
- Target_Path_Input: inputGroup(commonTargetPathInput),
+ Target_Path: {
+ Path_Scheme_Combobox: comboBox(
+ '.form .form-row:nth-of-type(4) .form-field__wrapper',
+ true
+ )
+ },
Description_Input: textAreaGroup(commonDescriptionTextArea),
Cancel_Button: commonFormCancelButton,
Register_Button: commonFormConfirmButton
diff --git a/tests/features/common/page-objects/jobs-and-workflows.po.js b/tests/features/common/page-objects/jobs-and-workflows.po.js
index 98985ad19..8fdd7f398 100644
--- a/tests/features/common/page-objects/jobs-and-workflows.po.js
+++ b/tests/features/common/page-objects/jobs-and-workflows.po.js
@@ -18,6 +18,7 @@ under the Apache 2.0 license is conditioned upon your compliance with
such restriction.
*/
import { By } from 'selenium-webdriver'
+import checkboxComponent from '../components/checkbox.component'
import commonTable from '../components/table.component'
import dropdownComponent from '../components/dropdown.component'
import actionMenu from '../components/action-menu.component'
@@ -29,7 +30,8 @@ import graph from '../components/graph.component'
import {
generateInputGroup,
generateDropdownGroup,
- generateLabelGroup
+ generateLabelGroup,
+ generateCheckboxGroup
} from '../../common-tools/common-tools'
// Monitor tab
@@ -47,6 +49,211 @@ const tabSelector = {
}
}
+// Batch run
+
+const batchRunWizardSteps = {
+ root: '.modal .modal__content .modal__body .wizard-steps',
+ header: {},
+ body: {
+ row: {
+ root: '.btn',
+ fields: {
+ text: 'span:nth-of-type(2)',
+ indicator: '.wizard-steps__indicator'
+ }
+ }
+ }
+}
+
+const batchTabSelector = {
+ root: '.wizard-form__content .content-menu',
+ header: {},
+ body: {
+ root: '.content-menu__list',
+ row: {
+ root: '.content-menu__item',
+ fields: {
+ key: 'a'
+ }
+ }
+ }
+}
+
+const functionsTableSelector = {
+ root: '.form .functions-list',
+ header: {},
+ body: {
+ row: {
+ root: '.job-card-template',
+ fields: {
+ name:
+ '.job-card-template__header > div:first-child',
+ sub_name:
+ '.job-card-template__header .job-card-template__sub-header .data-ellipsis',
+ description:
+ '.job-card-template__description',
+ labels: {
+ componentType: dropdownComponent,
+ structure: generateDropdownGroup(
+ '.job-card-template__chips input',
+ '.chip-block span.chips_button',
+ '.chip-block .data-ellipsis.tooltip-wrapper .edit-chip-container',
+ false,
+ true
+ )
+ }
+ }
+ }
+ }
+}
+
+const checkboxCategorySelector = {
+ root: '.hub-filter .categories-list',
+ header: {},
+ body: {
+ row: {
+ root: '.category',
+ fields: {
+ name:
+ '.form-field-checkbox label',
+ checkbox:
+ '.form-field-checkbox input'
+ }
+ }
+ }
+}
+
+const BatchRunLabelsTable = {
+ root:
+ '.job-wizard__run-details .form-row:nth-of-type(4) .chips',
+ header: {},
+ body: {
+ root: '.chips-wrapper',
+ add_row_btn: '.button-add',
+ row: {
+ root: '.chip-block',
+ fields: {
+ key_input: 'input.input-label-key',
+ value_input: 'input.input-label-value',
+ key_verify: '.edit-chip-container input.input-label-key',
+ value_verify: '.edit-chip-container input.input-label-value',
+ remove_btn: '.edit-chip__icon-close'
+ }
+ }
+ }
+}
+
+const DataInputsHeaders = {
+ root: '.wizard-form__content .form-table',
+ header: {},
+ body: {
+ root: '.form-table__header-row',
+ row: {
+ root: '.form-table__cell',
+ fields: {
+ key: 'div'
+ }
+ }
+ }
+}
+
+const BatchRunDataInputsTable = {
+ root: '.wizard-form__content .form-table',
+ header: {},
+ body: {
+ add_row_btn: '.form-table__action-row button',
+ row: {
+ root: '.form-table__row',
+ fields: {
+ edit_btn: '.form-table__actions-cell .round-icon-cp:nth-of-type(1)',
+ apply_btn: '.form-table__actions-cell .round-icon-cp:nth-of-type(1)',
+ delete_btn: '.form-table__actions-cell .round-icon-cp:nth-of-type(2)',
+ discard_btn: '.form-table__actions-cell .round-icon-cp:nth-of-type(2)',
+ name_input: '.form-field-input input',
+ name_verify: '.form-table__name-cell',
+ path_dropdown: {
+ componentType: dropdownComponent,
+ structure: generateDropdownGroup(
+ '.form-table__cell_1:nth-of-type(2) .form-field-combobox',
+ '.form-field__icons:nth-of-type(1)',
+ '.form-field-combobox__dropdown-list-option',
+ false,
+ false)
+ },
+ path_dropdown_autocomplete_artifacts: {
+ componentType: dropdownComponent,
+ structure: generateDropdownGroup(
+ '.form-table__cell_1:nth-of-type(2) .form-field-combobox',
+ '.form-field-combobox__input',
+ '.form-field-combobox__dropdown-list-option',
+ false,
+ false)
+ },
+ path_dropdown_autocomplete_project: {
+ componentType: dropdownComponent,
+ structure: generateDropdownGroup(
+ '.form-table__cell_1:nth-of-type(2) .form-field-combobox',
+ '.form-field-combobox__input',
+ '.form-field-combobox__dropdown-list-option',
+ false,
+ false)
+ },
+ path_dropdown_autocomplete_item: {
+ componentType: dropdownComponent,
+ structure: generateDropdownGroup(
+ '.form-table__cell_1:nth-of-type(2) .form-field-combobox',
+ '.form-field-combobox__input',
+ '.form-field-combobox__dropdown-list-option',
+ false,
+ false)
+ },
+ path_input: 'input.form-field-combobox__input',
+ path_verify: '.form-table__cell_1:nth-of-type(2)'
+ }
+ }
+ }
+}
+
+const BatchRunParametersTable = {
+ root: '.wizard-form__content .form-table',
+ header: {},
+ body: {
+ add_row_btn: '.form-table__action-row button',
+ checkbox: checkboxComponent({
+ root: '#overlay_container .form-field-checkbox',
+ elements: {
+ checkbox: 'input',
+ name: 'label',
+ icon: ''
+ }
+ }),
+ row: {
+ root: '.form-table__parameter-row',
+ fields: {
+ edit_btn: '.form-table__actions-cell .round-icon-cp:nth-of-type(1)',
+ apply_btn: '.form-table__actions-cell .round-icon-cp:nth-of-type(1)',
+ delete_btn: '.form-table__actions-cell .round-icon-cp:nth-of-type(2)',
+ discard_btn: '.form-table__actions-cell .round-icon-cp:nth-of-type(2)',
+ checkbox: '.form-field-checkbox input',
+ name_input: '.form-table__cell_2 .form-field-input input',
+ name_verify: '.form-table__cell_2',
+ type_dropdown: {
+ componentType: dropdownComponent,
+ structure: generateDropdownGroup(
+ '.form-table__cell_1 .form-field-select',
+ '.form-field__icons',
+ '.pop-up-dialog .options-list__body .select__item',
+ false,
+ false)
+ },
+ type_dropdown_verify: '.form-table__cell_1 .data-ellipsis',
+ value_input: '.form-table__cell_3 .form-field__control input',
+ value_verify: '.form-table__cell_3 .data-ellipsis'
+ }
+ }
+ }
+}
+
const resultsTable = {
root: '.table-body__cell:nth-of-type(7)',
header: {},
@@ -70,7 +277,7 @@ const actionMenuStructure = {
}
const jobsMonitorTable = {
- root: '.table__flex .table__content',
+ root: '.table__content',
header: {
root: '.table-head',
sorters: {
@@ -88,7 +295,7 @@ const jobsMonitorTable = {
row: {
root: '.table-row',
fields: {
- name: '.table-body__cell:nth-of-type(1) a .link',//'.table-body__cell:nth-of-type(1) a .link .data-ellipsis',
+ name: '.table-body__cell:nth-of-type(1) a .link',
status: {
componentType: labelComponent,
structure: generateLabelGroup(
@@ -410,6 +617,7 @@ const pageHeaderButton = By.css(
'.content__header .page-actions-container button'
)
const jobsTabSelector = commonTable(tabSelector)
+const batchRunTabSelector = commonTable(batchTabSelector)
const tableRefreshButton = By.css(
'.content__action-bar-wrapper .action-bar .actions #refresh'
)
@@ -421,6 +629,22 @@ const commonStatusFilter = dropdownComponent(
'.data-ellipsis .data-ellipsis' // Option value
)
)
+const projectSelect = dropdownComponent(
+ generateDropdownGroup(
+ '.form .functions-tab [data-testid="select"]',
+ '[data-testid="select-header"]', // Open Component
+ '[data-testid="select-body"] .select__item', // Options
+ '.data-ellipsis .data-ellipsis' // Option value
+ )
+)
+const categorySelect = dropdownComponent(
+ generateDropdownGroup(
+ '.hub-tab .form-row .filters-button',
+ '.data-ellipsis button', // Open Component
+ '.hub-filter .categories-list .category', // Options
+ '.form-field-checkbox' // Option value
+ )
+)
const commonNameFilter = inputGroup(
generateInputGroup(
'.content__action-bar-wrapper .filters > .input-wrapper:nth-of-type(3)',
@@ -441,7 +665,7 @@ const commonStartTimeFilter = dropdownComponent(
module.exports = {
JobsMonitorTab: {
Jobs_Tab_Selector: jobsTabSelector,
- New_Job_Button: pageHeaderButton,
+ Butch_Run_Button: pageHeaderButton,
Arrow_Back: By.css('.link-back__icon'),
Resource_Monitoring_Button: By.css(
'.content__action-bar-wrapper .action-bar button'
@@ -495,6 +719,117 @@ module.exports = {
Table_Refresh_Button: tableRefreshButton,
Schedule_Monitor_Table: commonTable(scheduleMonitorTable)
},
+ BatchRun: {
+ Batch_Run_Header: By.css(
+ '.modal .modal__content h5.modal__header-title'
+ ),
+ Function_Title: By.css(
+ '.modal .modal__content h6.modal__header-sub-title'
+ ),
+ Cross_Close_Button: By.css(
+ '.modal .modal__header-button .round-icon-cp'
+ ),
+ Search_Input: inputWithAutocomplete({
+ root: '.form-row .search-container',
+ elements: {
+ input: 'input',
+ options: '.functions-list > div > div.job-card-template__header > div.data-ellipsis.tooltip-wrapper',
+ option_name: ''
+ }
+ }),
+ Batch_Run_Wizard_Steps: commonTable(batchRunWizardSteps),
+ Step_1_Button: By.css(
+ '.modal .modal__content .modal__body .wizard-steps .btn:nth-of-type(1)'
+ ),
+ Step_2_Button: By.css(
+ '.modal .modal__content .modal__body .wizard-steps .btn:nth-of-type(2)'
+ ),
+ Step_3_Button: By.css(
+ '.modal .modal__content .modal__body .wizard-steps .btn:nth-of-type(3)'
+ ),
+ Step_4_Button: By.css(
+ '.modal .modal__content .modal__body .wizard-steps .btn:nth-of-type(4)'
+ ),
+ Step_5_Button: By.css(
+ '.modal .modal__content .modal__body .wizard-steps .btn:nth-of-type(5)'
+ ),
+ Step_6_Button: By.css(
+ '.modal .modal__content .modal__body .wizard-steps .btn:nth-of-type(6)'
+ ),
+ Step_7_Button: By.css(
+ '.modal .modal__content .modal__body .wizard-steps .btn:nth-of-type(7)'
+ ),
+ BatchRun_Tab_Selector: batchRunTabSelector,
+ Project_Selector_Dropdown: projectSelect,
+ Category_Selector_Dropdown: categorySelect,
+ Form_Header_Batch_Run: By.css('.form .form-row .form-step-title'),
+ Checkbox_Category_Selector: commonTable(checkboxCategorySelector),
+ Filter_Dropdown: {
+ Title: By.css('.hub-filter h3.filters-wizard__header'),
+ Clear_Button: By.css('.hub-filter .filters-wizard__modal-buttons button')
+ },
+ Filter_Button_Hub_Tab: By.css('.hub-tab .form-row .filters-button button'),
+ Functions_Table: commonTable(functionsTableSelector),
+ Overlay: By.css('#overlay_container .chip-block-hidden .chip-block-hidden__scrollable-container'),
+ Back_Button: By.css('.modal__content .modal__footer button.btn-tertiary'),
+ Next_Button: By.css('.modal__content .modal__footer button.btn-secondary'),
+ Hyperparameter_Checkbox: checkboxComponent({
+ root: '#overlay_container .form-field-checkbox',
+ elements: {
+ checkbox: 'input',
+ name: 'label',
+ icon: ''
+ }
+ }),
+ Function_Name_Input_Batch_Run: inputGroup(
+ generateInputGroup(
+ '.form-row .form-field-input .form-field__wrapper',
+ false,
+ true,
+ '.form-field__icons svg'
+ )
+ ),
+ Add_Label_Button: By.css('.job-wizard__run-details .form-row:nth-of-type(4) .chips .chips-wrapper .button-add'),
+ Close_Label_Button: By.css('.job-wizard__run-details .form-row:nth-of-type(4) .chips .chips-wrapper .edit-chip__icon-close'),
+ Run_Details_Labels_Key: inputGroup(
+ generateInputGroup(
+ '.job-wizard__run-details .form-row:nth-of-type(4) .chips-wrapper',
+ false,
+ true,
+ '.pop-up-dialog'
+ )
+ ),
+ Run_Details_Labels_Value: By.css ('.job-wizard__run-details .form-row:nth-of-type(4) .chips-wrapper [id="runDetails.labels[0].value"]'),
+ Name_Input_Batch_Run: By.css('.form-row .form-field-input .form-field__wrapper input'),
+ Version_Dropdown: dropdownComponent(
+ generateDropdownGroup('.form-col-1:nth-of-type(2)', '.form-field-select', '.form-field__select-value', false, false)
+ ),
+ Method_Dropdown: dropdownComponent(
+ generateDropdownGroup('.form-col-1:nth-of-type(3)', '.form-field-select', '.select__item-main-label', false, false)
+ ),
+ Method_Dropdown_Option: By.css('.form-col-1:nth-of-type(3) .form-field-select .form-field__select span'),
+ Image_Name_Input_Run_Details: inputGroup(
+ generateInputGroup(
+ '.job-wizard__run-details > div.form-field-input .form-field__wrapper',
+ true,
+ false,
+ '.form-field__warning svg'
+ )
+ ),
+ Image_Name_Text_Run_Details: By.css('.job-wizard__run-details .warning-text'),
+ Batch_Run_Labels_Table: commonTable(BatchRunLabelsTable),
+ Batch_Run_Data_Inputs_Table: commonTable(BatchRunDataInputsTable),
+ Data_Inputs_Headers: commonTable(DataInputsHeaders),
+ Batch_Run_Parameters_Table: commonTable(BatchRunParametersTable),
+ Add_Custom_Parameter_Button: By.css('.wizard-form__content .form-table .form-table__action-row button'),
+ Sub_Header_Parameters: By.css('.wizard-form__content .form-table .form-table__sub-header-row .form-table__cell'),
+ Checkbox_Parameters: checkboxComponent(
+ generateCheckboxGroup('.wizard-form__content .form-field-checkbox input', false, false, false)
+ ),
+ Delete_Button_Parameters: By.css('.form-table__parameter-row .form-table__actions-cell .round-icon-cp:nth-of-type(2)'),
+ Run_Button: By.css('.modal__content .modal__footer button.btn-secondary'),
+ Schedule_for_later_Button: By.css('.modal__content .modal__footer button.btn-tertiary'),
+ },
CreateJob: {
Back_Arrow_Button: By.css(
'.create-container .create-container__header .header-link a.header-link__icon'
@@ -503,7 +838,7 @@ module.exports = {
'.create-container .create-container__header .header-link h3.header-link__title'
),
Search_Input: inputWithAutocomplete({
- root: '.create-container .create-container__data .search-container',
+ root: '.create-container .create-container__data .search-container',
elements: {
input: 'input',
options: '.search-matches .search-matches__item',
diff --git a/tests/features/common/page-objects/ml-functions.po.js b/tests/features/common/page-objects/ml-functions.po.js
index acfe02146..5a716e004 100644
--- a/tests/features/common/page-objects/ml-functions.po.js
+++ b/tests/features/common/page-objects/ml-functions.po.js
@@ -54,10 +54,10 @@ const functionsTable = {
body: {
root: '.table-body',
row: {
- root: '.table-row', //table-body__row
+ root: '.table-row',
fields: {
expand_btn: '.table-body__cell:nth-of-type(1) svg.expand-arrow',
- name: '.table-body__cell:nth-of-type(1) a .name-wrapper .link', //span.link
+ name: '.table-body__cell:nth-of-type(1) a .name-wrapper .link',
tag: '.table-body__cell:nth-of-type(1) a .item-tag span',
status: '.table-body__cell:nth-of-type(1) .status i',
kind: {
diff --git a/tests/features/common/page-objects/models.po.js b/tests/features/common/page-objects/models.po.js
index d3431ec45..1e00f141e 100644
--- a/tests/features/common/page-objects/models.po.js
+++ b/tests/features/common/page-objects/models.po.js
@@ -25,7 +25,7 @@ import {
generateLabelGroup
} from '../../common-tools/common-tools'
import dropdownComponent from '../components/dropdown.component'
-import checkboxComponent from '../components/checkbox.component'
+// import checkboxComponent from '../components/checkbox.component'
import commonTable from '../components/table.component'
import actionMenu from '../components/action-menu.component'
import labelComponent from '../components/label.component'
@@ -40,7 +40,7 @@ const actionMenuStructure = {
}
const tabSelector = {
- root: '.content .content-menu', //'.content_with-menu .content-menu',
+ root: '.content .content-menu',
header: {},
body: {
root: '.content-menu__list',
@@ -54,7 +54,7 @@ const tabSelector = {
}
const modelsTable = {
- root: '.table-container .table__flex .table__content',
+ root: '.table-container .table__content',
header: {
root: '.table-head',
sorters: {
@@ -73,13 +73,15 @@ const modelsTable = {
root: '.table-row',
fields: {
name: '.table-body__cell:nth-of-type(1) a .name-wrapper .link',
+ tag: '.table-body__cell:nth-of-type(1) a .item-tag',
+ name_expand_btn: '.table-body__cell:nth-of-type(1) a .name-wrapper .item-tag',
expand_btn: '.table-body__cell:nth-of-type(1) svg.expand-arrow',
labels: {
componentType: dropdownComponent,
structure: generateDropdownGroup(
'.table-body__cell:nth-of-type(2)',
'.chip-block span.chips_button',
- '.chip-block .chip-block-hidden_visible .data-ellipsis.tooltip-wrapper',
+ '.chip-block .data-ellipsis.tooltip-wrapper',
false,
true
)
@@ -132,7 +134,7 @@ const modelsEndpointTable = {
structure: generateDropdownGroup(
'.table-body__cell:nth-of-type(5)',
'.chip-block span.chips_button',
- '.chip-block .chip-block-hidden_visible .data-ellipsis.tooltip-wrapper',
+ '.chip-block .data-ellipsis.tooltip-wrapper',
false,
true
)
@@ -236,35 +238,19 @@ const tableRefreshButton = By.css('.content .action-bar .tooltip-wrapper #refres
module.exports = {
modelsTab: {
Models_Tab_Selector: commonTable(tabSelector),
- Table_Tree_Filter_Dropdown: dropdownComponent(
- generateDropdownGroup(
- '.content .content__action-bar .filters .tag-filter',
- 'input',
- '.tag-filter__dropdown div',
- '',
- true
- )
- ),
Table_Name_Filter_Input: inputGroup(
generateInputGroup(
'.content .content__action-bar-wrapper .action-bar .name-filter .form-field-input',
true
)
),
- Table_Labels_Filter_Input: inputGroup(
- generateInputGroup('.content .content__action-bar .input-wrapper:nth-of-type(3)', true)
- ),
- Show_Iterations_Checkbox: checkboxComponent({
- root: '.content .content__action-bar .filters .checkbox',
- elements: {
- checkbox: 'svg[class]',
- name: '',
- icon: ''
- }
- }),
Table_Refresh_Button: tableRefreshButton,
Models_Table: commonTable(modelsTable),
- Register_Model_Button: By.css('.page-actions-container .btn_register')
+ Overlay: By.css('#overlay_container .chip-block-hidden_visible'),
+ Register_Model_Button: By.css('.page-actions-container .btn_register'),
+ Table_FilterBy_Button: By.css(
+ '.content .content__action-bar-wrapper .action-bar__filters .filters-button button'
+ )
},
modelEndpoints: {
Table_Refresh_Button: tableRefreshButton,
@@ -284,11 +270,17 @@ module.exports = {
'.data-ellipsis .data-ellipsis'
)
),
- Model_Endpoints_Table: commonTable(modelsEndpointTable)
+ Model_Endpoints_Table: commonTable(modelsEndpointTable),
+ Overlay: By.css('#overlay_container .chip-block-hidden_visible')
},
realTimePipelinesTab: {
Table_Name_Filter_Input: inputGroup(
- generateInputGroup('.content .content__action-bar-wrapper .filters .input-wrapper', true, false, true)
+ generateInputGroup(
+ '.content .content__action-bar-wrapper .filters .input-wrapper',
+ true,
+ false,
+ true
+ )
),
Table_Refresh_Button: tableRefreshButton,
Real_Time_Pipelines_Table: commonTable(realTimePipelinesTable),
diff --git a/tests/features/common/page-objects/project.po.js b/tests/features/common/page-objects/project.po.js
index 27339c560..f197eae98 100644
--- a/tests/features/common/page-objects/project.po.js
+++ b/tests/features/common/page-objects/project.po.js
@@ -25,9 +25,11 @@ import labelComponent from '../components/label.component'
import {
generateInputGroup,
generateLabelGroup,
- generateDropdownGroup
+ generateDropdownGroup,
+ generateCheckboxGroup
} from '../../common-tools/common-tools'
import inputGroup from '../components/input-group.component'
+import checkboxComponent from '../components/checkbox.component'
const createNewObject = dropdownComponent(
generateDropdownGroup(
@@ -169,7 +171,7 @@ const DataCollectionAdditionalActionsTable = {
const DevelopmentActionsTable = {
root:
- '.project-overview .project-overview__content .project-overview-card:nth-of-type(2) .project-overview-card__actions',
+ '.project-overview .project-overview__content .project-overview-card:nth-of-type(3) .project-overview-card__actions',
header: {},
body: {
root: '.project-overview-actions',
@@ -214,7 +216,7 @@ const DataCollectionLinksTable = {
const DevelopmentLinksTable = {
root:
- '.project-overview .project-overview__content .project-overview-card:nth-of-type(2) .project-overview-card__bottom',
+ '.project-overview .project-overview__content .project-overview-card:nth-of-type(3) .project-overview-card__bottom',
header: {},
body: {
root: '.additional-links',
@@ -294,6 +296,52 @@ const shardLagsTable = {
}
}
+const advancedEnvironmentVariablesTable = {
+ root: '.wizard-form__content .form-table',
+ header: {},
+ body: {
+ add_row_btn: '.form-table__action-row button',
+ row: {
+ root: '.form-table__row',
+ fields: {
+ edit_btn: '.form-table__actions-cell .round-icon-cp:nth-of-type(1)',
+ apply_btn: '.form-table__actions-cell .round-icon-cp:nth-of-type(1)',
+ delete_btn: '.form-table__actions-cell .round-icon-cp:nth-of-type(2)',
+ discard_btn: '.form-table__actions-cell .round-icon-cp:nth-of-type(2)',
+ checkbox: '.form-field-checkbox input',
+ name_input: '.form-field-input input',
+ name_verify: '.form-table__cell_2',
+ type_dropdown: {
+ componentType: dropdownComponent,
+ structure: generateDropdownGroup(
+ '.form-table__cell_1 .form-field-select',
+ '.form-field__icons',
+ '.pop-up-dialog .options-list__body .select__item',
+ false,
+ false)
+ },
+ type_dropdown_verify: '.form-table__cell_1 .data-ellipsis',
+ value_input: '.form-table__cell_3 .form-field__control input',
+ value_verify: '.form-table__cell_3 .data-ellipsis',
+ value_input_key: '.form-table__cell_3 .form-field-input:nth-of-type(2) .form-field__control input'
+ }
+ }
+ }
+}
+
+const commonAccessKeyCheckbox = checkboxComponent(
+ generateCheckboxGroup('.job-wizard__advanced .access-key-checkbox input', false, false, false)
+)
+
+const commonAccessKeyInput = inputGroup(
+ generateInputGroup(
+ '.align-stretch .form-field-input',
+ true,
+ false,
+ '.tooltip-wrapper svg'
+ )
+)
+
module.exports = {
project: {
Create_New: createNewObject,
@@ -393,5 +441,42 @@ module.exports = {
Consumer_Groups_Table: commonTable(consumerGroupsTable),
Shard_Lags_Table: commonTable(shardLagsTable),
Refresh_Button: By.css('.page-actions .round-icon-cp')
+ },
+ batchInference: {
+ Next_Button: By.css(
+ '.modal__footer .btn-secondary'
+ ),
+ Back_Button: By.css(
+ '.modal__footer .btn-tertiary'
+ ),
+ Advanced_Environment_Variables_Table: commonTable(
+ advancedEnvironmentVariablesTable
+ ),
+ Access_Key_Checkbox: commonAccessKeyCheckbox,
+ Access_Key_Input: commonAccessKeyInput,
+ Advanced_Accordion: {
+ Accordion_Header: By.css(
+ '.modal__body .wizard-form__content-container h5'
+ ),
+ Accordion_Subheader: By.css(
+ '.modal__body .wizard-form__content-container .form-table-title'
+ ),
+ Default_Input_Path_Input: inputGroup(
+ generateInputGroup(
+ '.modal__body .job-wizard__advanced .form-col-1:nth-of-type(1) .form-field__wrapper',
+ true,
+ false,
+ true
+ )
+ ),
+ Default_Artifact_Path_Input: inputGroup(
+ generateInputGroup(
+ '.modal__body .job-wizard__advanced .form-col-1:nth-of-type(2) .form-field__wrapper',
+ true,
+ false,
+ true
+ )
+ )
+ }
}
-}
+}
\ No newline at end of file
diff --git a/tests/features/common/page-objects/side-panel.po.js b/tests/features/common/page-objects/side-panel.po.js
index 3e24dff81..318d354d5 100644
--- a/tests/features/common/page-objects/side-panel.po.js
+++ b/tests/features/common/page-objects/side-panel.po.js
@@ -285,18 +285,18 @@ const jobCustomParametersTable = {
// TODO: Wait for some details
const volumePathsTable = {
root:
- '.new-item-side-panel__body .accordion__container:nth-of-type(3) .job-panel__item > .panel-section:nth-of-type(3) .volumes-table',
+ '.modal__content .form-row:nth-of-type(7)',
header: {
- root: '.table__header',
+ root: '.form-table__header-row',
sorters: {
- type: '.table__cell:nth-of-type(1)',
- volume_name: '.table__cell:nth-of-type(2)',
- path: '.table__cell:nth-of-type(3)'
+ type: '.form-table__cell:nth-of-type(1)',
+ volume_name: '.form-table__cell:nth-of-type(2)',
+ path: '.form-table__cell:nth-of-type(3)',
}
},
body: {
offset: 1,
- add_row_btn: '.no-hover .add-input',
+ add_row_btn: '.form-table__action-row button',
row: {
root: 'div[class=table__row]',
fields: {
@@ -314,33 +314,31 @@ const volumePathsTable = {
const resourcesNodeSelectorTable = {
root:
- '.new-item-side-panel__body .accordion__container:nth-of-type(3) .panel-section:nth-of-type(5) .key-value-table',
+ '.wizard-form__content .job-wizard__resources .form-key-value-table',
header: {
- root: '.table-row__header',
sorters: {
- key: '.table-cell__key',
- value: '.table-cell__value'
+ key: '.form-table__cell_1:nth-of-type(1)',
+ value: '.form-table__cell_1:nth-of-type(2)',
}
},
body: {
- add_row_btn: '.table-row .add-new-item-btn',
- save_row_btn: '.btn-add',
+ add_row_btn: '.form-table__action-row button',
row: {
- root: '.table-row:not(.table-row__header)',
+ root: '.form-table__row',
fields: {
- key: '.table-cell__key .data-ellipsis',
- value: '.table-cell__value .data-ellipsis',
- delete_btn: '.table-cell__actions .key-value-table__btn:nth-of-type(2)',
- edit_btn: '.table-cell__actions .key-value-table__btn:nth-of-type(1)',
- apply_edit_btn: '.table-cell__actions .key-value-table__btn:nth-of-type(1)',
+ key: '.form-table__cell_1:nth-of-type(1)',
+ value: '.form-table__cell_1:nth-of-type(2)',
+ delete_btn: '.form-table__actions-cell .round-icon-cp:nth-of-type(2)',
+ edit_btn: '.form-table__actions-cell .round-icon-cp:nth-of-type(1)',
+ apply_edit_btn: '.form-table__actions-cell .round-icon-cp:nth-of-type(1)',
key_input: {
componentType: inputGroup,
- structure: generateInputGroup('.table-cell__key', true, false, false)
+ structure: generateInputGroup('.form-table__cell_1:nth-of-type(1)', true, false, false)
},
value_input: {
componentType: inputGroup,
structure: generateInputGroup(
- '.table-cell__value',
+ '.form-table__cell_1:nth-of-type(2)',
true,
false,
false
@@ -351,7 +349,7 @@ const resourcesNodeSelectorTable = {
}
}
-const advancedEnvironmentVariablesTable = {
+const advancedEnvironmentVariablesTable_old = {
root:
'.new-item-side-panel__body .accordion__container:nth-of-type(4) .panel-section',
header: {
@@ -682,6 +680,39 @@ const parametersRuntimeConfigurationTable = {
}
}
+const advancedEnvironmentVariablesTable = {
+ root: '.wizard-form__content .form-table',
+ header: {},
+ body: {
+ add_row_btn: '.form-table__action-row button',
+ row: {
+ root: '.form-table__row',
+ fields: {
+ edit_btn: '.form-table__actions-cell .round-icon-cp:nth-of-type(1)',
+ apply_btn: '.form-table__actions-cell .round-icon-cp:nth-of-type(1)',
+ delete_btn: '.form-table__actions-cell .round-icon-cp:nth-of-type(2)',
+ discard_btn: '.form-table__actions-cell .round-icon-cp:nth-of-type(2)',
+ checkbox: '.form-field-checkbox input',
+ name_input: '.form-field-input input',
+ name_verify: '.form-table__cell_2',
+ type_dropdown: {
+ componentType: dropdownComponent,
+ structure: generateDropdownGroup(
+ '.form-table__cell_1 .form-field-select',
+ '.form-field__icons',
+ '.pop-up-dialog .options-list__body .select__item',
+ false,
+ false)
+ },
+ type_dropdown_verify: '.form-table__cell_1 .data-ellipsis',
+ value_input: '.form-table__cell_3 .form-field__control input',
+ value_verify: '.form-table__cell_3 .data-ellipsis',
+ value_input_key: '.form-table__cell_3 .form-field-input:nth-of-type(2) .form-field__control input'
+ }
+ }
+ }
+}
+
// common components
const commonCrossCloseButton = By.css(
'div.new-item-side-panel .panel-title__btn_close'
@@ -698,10 +729,10 @@ const commonVolumePathsTableTypeDropdown = dropdownComponent(
const commonPodsPriorityDropdown = dropdownComponent(
generateDropdownGroup(
- '.new-item-side-panel .accordion__container:nth-of-type(3) .pods-priority',
- '.select__value',
- '.select__body .select__item',
- '.data-ellipsis .data-ellipsis'
+ '.modal__content .modal__body .job-wizard__resources .resources__select',
+ '.form-field-select .form-field__wrapper-normal',
+ '.options-list__body .select__item-label',
+ '.data-ellipsis'
)
)
@@ -763,6 +794,29 @@ module.exports = {
),
Description_Input: textAreaGroup(generateTextAreaGroup('.feature-set-panel .panel-title .text-area-wrapper')),
Labels_Table: commonTable(labelsTable),
+ Passthrough_Checkbox: checkboxComponent(
+ generateCheckboxGroup(
+ '.feature-set-panel .panel-title .checkbox',
+ true,
+ false,
+ true
+ )
+ ),
+ Passthrough_Checkbox_State: By.css(
+ '.feature-set-panel .panel-title .checkbox'
+ ),
+ Offline_Checkbox_State: By.css(
+ '.feature-set-panel .accordion__container:nth-of-type(3) .accordion__body .target-store__item:nth-of-type(2) .checkbox'
+ ),
+ Online_Checkbox_State: By.css(
+ '.feature-set-panel .accordion__container:nth-of-type(3) .accordion__body .target-store__item:nth-of-type(1) .checkbox'
+ ),
+ Offline_Partition_Checkbox_State: By.css(
+ '.feature-set-panel .accordion__container:nth-of-type(3) .panel-section__body .target-store__item:nth-of-type(2) .target-store__inputs-container .checkbox'
+ ),
+ External_Offline_Checkbox_State: By.css(
+ '.feature-set-panel .accordion__container:nth-of-type(3) .accordion__body .target-store__item:nth-of-type(3) .checkbox'
+ ),
Data_Source_Accordion: {
Accordion_Header: By.css(
'.feature-set-panel .accordion__container:nth-of-type(1) h5'
@@ -1008,6 +1062,9 @@ module.exports = {
'.select__header .select__value',
'.select__body .select__item' )
),
+ URL_Combobox: comboBox(
+ '.target-store__item .target-store__inputs-container .combobox'
+ ),
URL_Input: inputGroup(
generateInputGroup(
'.target-store__item .target-store__inputs-container .url',
@@ -1116,6 +1173,297 @@ module.exports = {
'.feature-set-panel .new-item-side-panel__buttons-container .btn-secondary:nth-of-type(3)'
)
},
+ batchRunEdit: {
+ Hyperparameter_Strategy_Accordion:{
+ Strategy_Dropdown: dropdownComponent(
+ generateDropdownGroup(
+ '.modal__content .modal__body .job-wizard__hyperparameter-strategy .strategy-grid-item',
+ '.form-field-select .form-field__wrapper-normal',
+ '.options-list__body .select__item-label',
+ '.data-ellipsis'
+ )
+ ),
+ Max_Iterations: inputGroup(
+ generateInputGroup(
+ '.modal__content .modal__body .wizard-form__content .max-iterations-grid-item .form-field__wrapper-normal',
+ true,
+ true,
+ false
+ )
+ ),
+ Max_Errors: inputGroup(
+ generateInputGroup(
+ '.modal__content .modal__body .wizard-form__content .max-errors-grid-item .form-field__wrapper-normal',
+ true,
+ true,
+ false
+ )
+ )
+ },
+ Parameters_Accordion:{
+ Parameters_From_UI_Radiobutton: radiobuttonComponent(
+ {
+ root:
+ '.modal__content .wizard-form__content-container .form-row .form-field-radio:nth-of-type(1)',
+ elements: {
+ radiobutton: 'input',
+ mark: 'label',
+ name: '',
+ description: ''
+ }
+ }
+ ),
+ Parameters_From_File_Radiobutton: radiobuttonComponent(
+ {
+ root:
+ '.modal__content .wizard-form__content-container .form-row .form-field-radio:nth-of-type(2)',
+ elements: {
+ radiobutton: 'input',
+ mark: '',
+ name: 'label',
+ description: ''
+ }
+ }
+ ),
+ Parameters_From_File_Input: inputGroup(
+ generateInputGroup(
+ '.modal__content .wizard-form__content-container .form-row .form-field-input .form-field__wrapper',
+ true,
+ true,
+ false
+ )
+ ),
+ Hyper_Toggle_Switch: By.css('.modal__content .form-table__row:nth-of-type(2) .form-table__cell_hyper .form-field-toggle__switch')
+ },
+ Resources_Accordion: {
+ Pods_Priority_Dropdown: commonPodsPriorityDropdown,
+ Node_Selection_Subheader: By.css('.modal__content .wizard-form__content-container .form-row:nth-child(3)'),
+ Volumes_Subheader: labelComponent(
+ generateLabelGroup(
+ '.modal__content .wizard-form__content-container .form-row:nth-child(6)',
+ false,
+ true
+ )
+ ),
+ // Volume Path inputs
+ Volume_Paths_Table_Type_Dropdown: dropdownComponent(
+ generateDropdownGroup(
+ '.form-table__volume-row .form-table__volume-cell:nth-of-type(1) .form-field__wrapper .form-field__select',
+ '.form-field__select-value',
+ '.options-list__body .select__item',
+ '.data-ellipsis .data-ellipsis'
+ )
+ ),
+ Volume_Paths_Table_Volume_Name_Input: inputGroup(
+ generateInputGroup(
+ '.form-table__volume-row .form-table__volume-cell:nth-of-type(2) .form-field__wrapper',
+ true,
+ true,
+ '.form-field__warning svg'
+ )
+ ),
+ Volume_Paths_Table_Path_Input: inputGroup(
+ generateInputGroup(
+ '.form-table__volume-row .form-table__volume-cell:nth-of-type(3) .form-field__wrapper',
+ true,
+ true,
+ '.form-field__warning svg'
+ )
+ ),
+ Volume_Paths_Table_Container_Input: inputGroup(
+ generateInputGroup(
+ '.form-table__volume-row .form-table__volume-cell:nth-of-type(4) .form-field__wrapper',
+ true,
+ true,
+ true
+ )
+ ),
+ Volume_Paths_Table_Config_Map_Input: inputGroup(
+ generateInputGroup(
+ '.form-table__volume-row .form-table__volume-cell:nth-of-type(4) .form-field__wrapper',
+ true,
+ true,
+ '.form-field__warning svg'
+ )
+ ),
+ Volume_Paths_Table_Secret_Name_Input: inputGroup(
+ generateInputGroup(
+ '.form-table__volume-row .form-table__volume-cell:nth-of-type(4) .form-field__wrapper',
+ true,
+ true,
+ '.form-field__warning svg'
+ )
+ ),
+ Volume_Paths_Table_Claime_Name_Input: inputGroup(
+ generateInputGroup(
+ '.form-table__volume-row .form-table__volume-cell:nth-of-type(4) .form-field__wrapper',
+ true,
+ true,
+ '.form-field__warning svg'
+ )
+ ),
+ Volume_Paths_Table_Access_Key_Input: inputGroup(
+ generateInputGroup(
+ '.form-table__volume-row .form-table__volume-cell:nth-of-type(5) .form-field__wrapper',
+ true,
+ true,
+ '.form-field__warning svg'
+ )
+ ),
+ Volume_Paths_Table_Resource_Path_Input: inputGroup(
+ generateInputGroup(
+ '.form-table__volume-row .form-table__volume-cell:nth-of-type(6) .form-field__wrapper',
+ true,
+ true,
+ true
+ )
+ ),
+ Edit_Volume_Name_Input: inputGroup(generateInputGroup('.volumes-table .edit-row:not(.no-border_top) .table__cell-input:nth-of-type(2)')),
+ Edit_Volume_Path_Input: inputGroup(generateInputGroup('.volumes-table .edit-row:not(.no-border_top) .table__cell-input:nth-of-type(3)')),
+ Add_New_Row_Button: By.css('.form-table__volume-row.active .form-table__actions-cell .round-icon-cp:nth-of-type(1)'),
+ Delete_New_Row_Button: By.css('.form-table__volume-row .form-table__actions-cell .round-icon-cp:nth-of-type(2)'),
+ Apply_Edit_Button: By.css('.volumes-table .apply-edit-btn'),
+ Volume_Paths_Table: commonTable(volumePathsTable),
+ Memory_Request_Dropdown: dropdownComponent(
+ generateDropdownGroup(
+ '.wizard-form__content-container .resources-units .form-col-1:nth-of-type(1) .resources-card__fields:nth-child(2)',
+ '.resources-card__fields-select',
+ '.options-list__body .select__item',
+ '.data-ellipsis .data-ellipsis'
+ )
+ ),
+ Memory_Request_Number_Input: numberInputGroup(
+ generateNumberInputGroup(
+ '.wizard-form__content-container .resources-units .form-col-1:nth-of-type(1) .resources-card__fields:nth-child(2) .form-field-input',
+ {
+ inc_btn: '.range__buttons button[class*=increase]',
+ dec_btn: '.range__buttons button[class*=decrease]'
+ },
+ true,
+ false,
+ '.form-field__icons svg'
+ )
+ ),
+ Memory_Limit_Dropdown: dropdownComponent(
+ generateDropdownGroup(
+ '.wizard-form__content-container .resources-units .form-col-1:nth-of-type(1) .resources-card__fields:nth-child(3)',
+ '.resources-card__fields-select',
+ '.options-list__body .select__item',
+ '.data-ellipsis .data-ellipsis'
+ )
+ ),
+ Memory_Limit_Number_Input: numberInputGroup(
+ generateNumberInputGroup(
+ '.wizard-form__content-container .resources-units .form-col-1:nth-of-type(1) .resources-card__fields:nth-child(3) .form-field-input',
+ false,
+ true,
+ false,
+ '.form-field__icons svg'
+ )
+ ),
+ CPU_Request_Dropdown: dropdownComponent(
+ generateDropdownGroup(
+ '.wizard-form__content-container .resources-units .form-col-1:nth-of-type(2) .resources-card__fields:nth-child(2)',
+ '.resources-card__fields-select',
+ '.options-list__body .select__item',
+ '.data-ellipsis .data-ellipsis'
+ )
+ ),
+ CPU_Request_Number_Input: numberInputGroup(
+ generateNumberInputGroup(
+ '.wizard-form__content-container .resources-units .form-col-1:nth-of-type(2) .resources-card__fields:nth-child(2) .form-field-input',
+ false,
+ true,
+ false,
+ '.form-field__icons svg'
+ )
+ ),
+ CPU_Limit_Dropdown: dropdownComponent(
+ generateDropdownGroup(
+ '.wizard-form__content-container .resources-units .form-col-1:nth-of-type(2) .resources-card__fields:nth-child(3)',
+ '.resources-card__fields-select',
+ '.options-list__body .select__item',
+ '.data-ellipsis .data-ellipsis'
+ )
+ ),
+ CPU_Limit_Number_Input: numberInputGroup(
+ generateNumberInputGroup(
+ '.wizard-form__content-container .resources-units .form-col-1:nth-of-type(2) .resources-card__fields:nth-child(3) .form-field-input',
+ false,
+ true,
+ false,
+ '.form-field__icons svg'
+ )
+ ),
+ GPU_Limit_Number_Input: numberInputGroup(
+ generateNumberInputGroup(
+ '.wizard-form__content-container .resources-units .form-col-1:nth-of-type(3) .resources-card__fields .form-field-input',
+ false,
+ true,
+ false,
+ '.form-field__icons svg'
+ )
+ ),
+ Resources_Node_Selector_Table: commonTable(resourcesNodeSelectorTable)
+ },
+ Schedule_For_Later: {
+ Schedule_Button: By.css('.schedule-wizard .modal__footer-actions .btn-secondary'),
+ Time_unit_Dropdown: dropdownComponent(
+ generateDropdownGroup(
+ '.simple-schedule-item .form-field-select .form-field__wrapper',
+ '.form-field__control .form-field__select',
+ '.options-list__body .select__item',
+ '.data-ellipsis .data-ellipsis'
+ )
+ ),
+ Intervals_Dropdown: dropdownComponent(
+ generateDropdownGroup(
+ '.simple-schedule-item:nth-of-type(2) .form-field-select .form-field__wrapper',
+ '.form-field__control .form-field__select',
+ '.options-list__body .select__item',
+ '.data-ellipsis .data-ellipsis'
+ )
+ ),
+ At_time_Input: numberInputGroup(
+ generateNumberInputGroup(
+ '.form-col-1 .time-picker-container .time-picker__control',
+ false,
+ true,
+ false
+ )
+ ),
+ Schedule_item_Sunday: By.css('.simple-schedule-item .schedule-repeat-week .schedule-repeat-week_day:nth-of-type(1)'),
+ Schedule_item_Monday: By.css('.simple-schedule-item .schedule-repeat-week .schedule-repeat-week_day:nth-of-type(2)'),
+ Schedule_item_Tuesday: By.css('.simple-schedule-item .schedule-repeat-week .schedule-repeat-week_day:nth-of-type(3)'),
+ Schedule_item_Wednesday: By.css('.simple-schedule-item .schedule-repeat-week .schedule-repeat-week_day:nth-of-type(4)'),
+ Schedule_item_Thursday: By.css('.simple-schedule-item .schedule-repeat-week .schedule-repeat-week_day:nth-of-type(5)'),
+ Schedule_item_Friday: By.css('.simple-schedule-item .schedule-repeat-week .schedule-repeat-week_day:nth-of-type(6)'),
+ Schedule_item_Saturday: By.css('.simple-schedule-item .schedule-repeat-week .schedule-repeat-week_day:nth-of-type(7)'),
+ Error_Message: By.css('.schedule-content .error')
+ },
+ Advanced_Environment_Variables_Table: commonTable(advancedEnvironmentVariablesTable),
+ Advanced_Accordion: {
+ Accordion_Subheader: By.css(
+ '.modal__body .wizard-form__content-container .form-table-title'
+ ),
+ Default_Input_Path_Input: inputGroup(
+ generateInputGroup(
+ '.modal__body .job-wizard__advanced .form-col-1:nth-of-type(1) .form-field__wrapper',
+ true,
+ false,
+ true
+ )
+ ),
+ Default_Artifact_Path_Input: inputGroup(
+ generateInputGroup(
+ '.modal__body .job-wizard__advanced .form-col-1:nth-of-type(2) .form-field__wrapper',
+ true,
+ false,
+ true
+ )
+ )
+ }
+ },
newJobTemplateEdit: {
Cross_Close_Button: commonCrossCloseButton,
Name_Edit_Button: By.css(
@@ -1423,7 +1771,7 @@ module.exports = {
'.new-item-side-panel__body .accordion__container:nth-of-type(4) .new-item-side-panel__expand-icon'
),
Advanced_Environment_Variables_Table: commonTable(
- advancedEnvironmentVariablesTable
+ advancedEnvironmentVariablesTable_old
),
Advanced_Secrets_Table: commonTable(advancedSecretsTable),
Advanced_Environment_Variables_Demo_Table: commonTable(
@@ -1626,6 +1974,14 @@ module.exports = {
true
)
),
+ New_Requirements_Input: inputGroup(
+ generateInputGroup(
+ '.new-item-side-panel .accordion__container:nth-of-type(2) .requirements.input-wrapper',
+ true,
+ true,
+ true
+ )
+ ),
New_Function_Build_Commands_Text_Area: By.css(
'.new-item-side-panel .accordion__container:nth-of-type(2) .commands.text-area-wrapper .text-area'
),
@@ -2018,10 +2374,10 @@ module.exports = {
'.new-item-side-panel .new-item-side-panel__buttons-container .btn-label .data-ellipsis:nth-of-type(1)'
),
Save_Button: By.css(
- '.new-item-side-panel .new-item-side-panel__buttons-container .btn-tertiary' //.data-ellipsis:nth-of-type(1)'
+ '.new-item-side-panel .new-item-side-panel__buttons-container .btn-tertiary'
),
Deploy_Button: By.css(
- '.new-item-side-panel .new-item-side-panel__buttons-container .btn-secondary' //.data-ellipsis:nth-of-type(1)'
+ '.new-item-side-panel .new-item-side-panel__buttons-container .btn-secondary'
)
}
}
diff --git a/tests/features/datasets.feature b/tests/features/datasets.feature
index 717d2d6d3..d0425e5e4 100644
--- a/tests/features/datasets.feature
+++ b/tests/features/datasets.feature
@@ -3,7 +3,7 @@ Feature: Datasets Page
Testcases that verifies functionality on Datasets Page
@passive
- Scenario: Check all mandatory components on Datasets page
+ Scenario: MLD001 - Check all mandatory components on Datasets page
Given open url
And click on row root with value "getting-started-tutorial-admin" in "name" column in "Projects_Table" table on "Projects" wizard
And wait load page
@@ -17,7 +17,6 @@ Feature: Datasets Page
And wait load page
Then verify breadcrumbs "tab" label should be equal "Datasets" value
And wait load page
- Then verify "Feature_Store_Tab_Selector" on "Datasets" wizard should contains "Feature_Store"."Tab_List"
Then verify "Register_Dataset_Button" element visibility on "Datasets" wizard
Then "Register_Dataset_Button" element on "Datasets" should contains "Register Dataset" value
Then verify "Table_Name_Filter_Input" element visibility on "Datasets" wizard
@@ -36,7 +35,7 @@ Feature: Datasets Page
Then verify "Datasets_Table" element visibility on "Datasets" wizard
@passive
- Scenario: Verify behaviour of Show iterations checkbox on Datasets page
+ Scenario: MLD002 - Verify behaviour of Show iterations checkbox on Datasets page
Given open url
And click on row root with value "churn-project-admin" in "name" column in "Projects_Table" table on "Projects" wizard
And wait load page
@@ -67,7 +66,7 @@ Feature: Datasets Page
@passive
@inProgress
- Scenario: Check all mandatory components in Item infopane on Overview tab table on Datasets page
+ Scenario: MLD003 - Check all mandatory components in Item infopane on Overview tab table on Datasets page
Given open url
And wait load page
And click on row root with value "churn-project-admin" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -82,14 +81,19 @@ Feature: Datasets Page
Then verify "Updated" element visibility on "Datasets_Info_Pane" wizard
Then verify "Download_Button" element visibility on "Datasets_Info_Pane" wizard
Then verify "Action_Menu" element visibility on "Datasets_Info_Pane" wizard
+ Then verify "Full_View_Button" element visibility on "Datasets_Info_Pane" wizard
Then verify "Cross_Close_Button" element visibility on "Datasets_Info_Pane" wizard
Then verify "Overview_General_Headers" on "Datasets_Info_Pane" wizard should contains "Datasets_Info_Pane"."Overview_General_Headers"
And hover "Overview_Hash_Header" component on "Datasets_Info_Pane" wizard
Then verify "Overview_Hash_Header" on "Datasets_Info_Pane" wizard should display "Label_Hint"."Overview_Hash"
Then verify "Overview_UID_Header" on "Datasets_Info_Pane" wizard should display "Label_Hint"."Overview_UID"
+ Then click on "Full_View_Button" element on "Datasets_Info_Pane" wizard
+ Then verify "Cross_Close_Button" element not exists on "Datasets_Info_Pane" wizard
+ Then click on "Tabel_View_Button" element on "Datasets_Info_Pane" wizard
+ Then verify "Cross_Close_Button" element visibility on "Datasets_Info_Pane" wizard
@passive
- Scenario: Check Details panel still active on page refresh
+ Scenario: MLD005 - Check Details panel still active on page refresh
* set tear-down property "dataset" created in "automation-test" project with "test-file" value
* create "test-dataset" Dataset with "v1" tag in "default" project with code 200
Given open url
@@ -113,11 +117,8 @@ Feature: Datasets Page
Then verify "Header" element visibility on "Datasets_Info_Pane" wizard
Then "Header" element on "Datasets_Info_Pane" should contains "test-dataset" value
- @FAILED_TODO
- #TODO: 'Name_Input' - options "Input_Hint"."Artifact_Name_Hint" implementation with click on warning hint
- #TODO: 'Target_Path_Input' implementstion with dropdown before input, rewrite test case
@passive
- Scenario: Check all mandatory components on Register Dataset form
+ Scenario: MLD006 - Check all mandatory components on Register Dataset form
Given open url
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
And wait load page
@@ -143,9 +144,10 @@ Feature: Datasets Page
Then type value " " to "Name_Input" field on "Register_Dataset" wizard
Then verify "Name_Input" on "Register_Dataset" wizard should display options "Input_Hint"."Artifact_Name_Hint"
Then verify "Name_Input" options rules on form "Register_Dataset" wizard
- Then verify "Target_Path_Input" element visibility on "Register_Dataset" wizard
- Then type value " " to "Target_Path_Input" field on "Register_Dataset" wizard
- Then verify "Target_Path_Input" on "Register_Dataset" wizard should display warning "Input_Hint"."Input_Field_Invalid"
+ Then verify options in "Path_Scheme_Combobox" combobox in "Target_Path" on "Register_Dataset" wizard should contains "Register_Dataset"."Combobox_Options"
+ When select "V3IO" option in "Path_Scheme_Combobox" combobox on "Target_Path" accordion on "Register_Dataset" wizard
+ When type value " " to "Path_Scheme_Combobox" field on "Target_Path" on "Register_Dataset" wizard
+ Then verify "Path_Scheme_Combobox" element in "Target_Path" on "Register_Dataset" wizard should display warning "Input_Hint"."V3IO_Path_Hint"
Then verify "Description_Input" element visibility on "Register_Dataset" wizard
Then type value " " to "Description_Input" field on "Register_Dataset" wizard
Then verify "Description_Input" on "Register_Dataset" wizard should display warning "Input_Hint"."Input_Field_Invalid"
@@ -156,7 +158,8 @@ Feature: Datasets Page
Then click on "Register_Button" element on "Register_Dataset" wizard
Then verify "Register_Button" element on "Register_Dataset" wizard is disabled
Then type value "dataset" to "Name_Input" field on "Register_Dataset" wizard
- Then type value "target/path" to "Target_Path_Input" field on "Register_Dataset" wizard
+ When select "V3IO" option in "Path_Scheme_Combobox" combobox on "Target_Path" accordion on "Register_Dataset" wizard
+ When type value "target/path" to "Path_Scheme_Combobox" field on "Target_Path" on "Register_Dataset" wizard
Then type value "new dataset description" to "Description_Input" field on "Register_Dataset" wizard
Then check "Description_Input" textarea counter on "Register_Dataset" wizard
Then verify "Register_Button" element on "Register_Dataset" wizard is enabled
@@ -165,14 +168,14 @@ Feature: Datasets Page
Then click on "Cancel_Button" element on "Common_Popup" wizard
Then verify if "Register_Dataset" popup dialog appears
Then verify "Name_Input" input should contains "dataset" value on "Register_Dataset" wizard
- Then verify "Target_Path_Input" input should contains "target/path" value on "Register_Dataset" wizard
+ Then verify "Path_Scheme_Combobox" input should contains "target/path" value in "Target_Path" on "Register_Dataset" wizard
Then verify "Description_Input" input should contains "new dataset description" value on "Register_Dataset" wizard
Then click on "Cross_Cancel_Button" element on "Register_Dataset" wizard
Then verify if "Common_Popup" popup dialog appears
Then click on "Cancel_Button" element on "Common_Popup" wizard
Then verify if "Register_Dataset" popup dialog appears
Then verify "Name_Input" input should contains "dataset" value on "Register_Dataset" wizard
- Then verify "Target_Path_Input" input should contains "target/path" value on "Register_Dataset" wizard
+ Then verify "Path_Scheme_Combobox" input should contains "target/path" value in "Target_Path" on "Register_Dataset" wizard
Then verify "Description_Input" input should contains "new dataset description" value on "Register_Dataset" wizard
Then navigate back
Then verify if "Common_Popup" popup dialog appears
@@ -188,9 +191,7 @@ Feature: Datasets Page
Then navigate forward
Then verify "Title" element not exists on "Register_Dataset" wizard
- @FAILED_TODO
- #TODO: 'Target_Path_Input' implementstion with dropdown before input, rewrite test case
- Scenario: Verify behaviour on Register new Dataset
+ Scenario: MLD007 - Verify behaviour on Register new Dataset
* set tear-down property "dataset" created in "default" project with "test-dataset" value
Given open url
And wait load page
@@ -201,7 +202,8 @@ Feature: Datasets Page
Then click on "Register_Dataset_Button" element on "Datasets" wizard
Then verify if "Register_Dataset" popup dialog appears
Then type value "test-dataset" to "Name_Input" field on "Register_Dataset" wizard
- Then type value "test-path" to "Target_Path_Input" field on "Register_Dataset" wizard
+ When select "V3IO" option in "Path_Scheme_Combobox" combobox on "Target_Path" accordion on "Register_Dataset" wizard
+ When type value "target/path" to "Path_Scheme_Combobox" field on "Target_Path" on "Register_Dataset" wizard
Then click on "Register_Button" element on "Register_Dataset" wizard
And wait load page
Then check "test-dataset" value in "name" column in "Datasets_Table" table on "Datasets" wizard
@@ -209,7 +211,7 @@ Feature: Datasets Page
Then "Header" element on "Datasets_Info_Pane" should contains "test-dataset" value
Then check "test-dataset" value in "key" column in "Overview_Table" table on "Datasets_Info_Pane" wizard
Then check "latest" value in "tag" column in "Overview_Table" table on "Datasets_Info_Pane" wizard
- Then check "test-path" value in "path" column in "Overview_Table" table on "Datasets_Info_Pane" wizard
+ Then check "v3io:///target/path" value in "path" column in "Overview_Table" table on "Datasets_Info_Pane" wizard
@passive
Scenario: Check filtering by name on Datasets page
@@ -226,10 +228,8 @@ Feature: Datasets Page
And wait load page
Then value in "name" column with "text" in "Datasets_Table" on "Datasets" wizard should contains "ea"
- @FAILED_TODO
- #TODO: Then value in "labels" column with "dropdowns" in "Datasets_Table" on "Datasets"- change locator to overview container
@passive
- Scenario: verify filtering by label on Datasets page
+ Scenario: MLD004 - Verify filtering by label on Datasets page
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -254,9 +254,8 @@ Feature: Datasets Page
Then click on "Apply_Button" element on "Artifacts_FilterBy_Popup" wizard
And wait load page
And verify "No_Data_Message" element visibility on "commonPagesHeader" wizard
+ Then "No_Data_Message" component on "commonPagesHeader" should contains "No_Data_Message"."No_Datasets_data"
- @FAILED_TODO
- #TODO: select "View YAML" option in action menu on "Datasets" wizard in "Datasets_Table" table at row with "latest #0" value - An invalid or illegal selector was specified
@passive
Scenario: Verify View YAML action on Datasets page
Given open url
@@ -278,7 +277,7 @@ Feature: Datasets Page
Then click on "Apply_Button" element on "Artifacts_FilterBy_Popup" wizard
And wait load page
Then click on cell with row index 1 in "expand_btn" column in "Datasets_Table" table on "Datasets" wizard
- Then select "View YAML" option in action menu on "Datasets" wizard in "Datasets_Table" table at row with "latest #0" value in "name" column
+ Then select "View YAML" option in action menu on "Datasets" wizard in "Datasets_Table" table at row with "latest" value in "name_expand_btn" column
Then verify if "View_YAML" popup dialog appears
Then verify "Cross_Cancel_Button" element visibility on "View_YAML" wizard
Then verify "YAML_Modal_Container" element visibility on "View_YAML" wizard
@@ -301,7 +300,8 @@ Feature: Datasets Page
Then verify "Cross_Cancel_Button" element visibility on "Artifact_Preview_Popup" wizard
@FAILED_TODO
- #TODO: redirection from "projects/INVALID/datasets/test_ds/latest/0/overview" to "projects" - wrong redirect
+ #TODO: Redirection - ML-4600
+ #TODO: url without iter number, doesn't send in new artifacts structure
Scenario: Check broken link redirection
* set tear-down property "dataset" created in "default" project with "test_ds" value
* create "test_ds" Dataset with "latest" tag in "default" project with code 200
@@ -314,7 +314,10 @@ Feature: Datasets Page
And wait load page
And select "tab" with "Datasets" value in breadcrumbs menu
And wait load page
- When click on cell with row index 1 in "name" column in "Datasets_Table" table on "Datasets" wizard
+ When click on cell with row index 2 in "name" column in "Datasets_Table" table on "Datasets" wizard
+ And wait load page
+ And wait load page
+ And wait load page
Then verify redirection from "projects/default/datasets/test_ds/latest/0/INVALID" to "projects/default/datasets/test_ds/latest/0/overview"
Then select "Preview" tab in "Info_Pane_Tab_Selector" on "Datasets_Info_Pane" wizard
And wait load page
@@ -346,3 +349,79 @@ Feature: Datasets Page
Then verify "Header" element visibility on "Models_Info_Pane" wizard
Then save to context "name" column on 2 row from "Datasets_Table" table on "Datasets" wizard
Then compare "Header" element value on "Models_Info_Pane" wizard with test "name" context value
+
+ Scenario: MLD009 - Check that version tag is filled when edit it in table view and full view on Overview tab table on Datasets page
+ Given open url
+ And wait load page
+ And click on row root with value "churn-project-admin" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Datasets" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ When click on cell with row index 1 in "name" column in "Datasets_Table" table on "Datasets" wizard
+ Then verify "Info_Pane_Tab_Selector" on "Datasets_Info_Pane" wizard should contains "Datasets_Info_Pane"."Tab_List"
+ Then verify "Overview" tab is active in "Info_Pane_Tab_Selector" on "Datasets_Info_Pane" wizard
+ Then verify "Overview_General_Headers" on "Datasets_Info_Pane" wizard should contains "Datasets_Info_Pane"."Overview_General_Headers"
+ Then check "latest" value in "tag" column in "Overview_Table" table on "Datasets_Info_Pane" wizard
+ Then click on "Edit_btn_table_view" element on "Datasets_Info_Pane" wizard
+ And wait load page
+ Then verify "Version_tag_Input_table_view" on "Datasets_Info_Pane" wizard should contains "latest" value
+ Then click on "Full_View_Button" element on "Datasets_Info_Pane" wizard
+ Then verify "Cross_Close_Button" element not exists on "Datasets_Info_Pane" wizard
+ Then click on "Edit_btn_full_view" element on "Datasets_Info_Pane" wizard
+ Then verify "Version_tag_Input_full_view" on "Datasets_Info_Pane" wizard should contains "latest" value
+ Then click on "Tabel_View_Button" element on "Datasets_Info_Pane" wizard
+ Then verify "Cross_Close_Button" element visibility on "Datasets_Info_Pane" wizard
+
+Scenario: MLD010 - Check that version tag dropdown shows all tags on filters wizard on Datasets page
+ Given open url
+ And wait load page
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Datasets" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ When click on cell with row index 1 in "name" column in "Datasets_Table" table on "Datasets" wizard
+ Then verify "Info_Pane_Tab_Selector" on "Datasets_Info_Pane" wizard should contains "Datasets_Info_Pane"."Tab_List"
+ Then verify "Overview" tab is active in "Info_Pane_Tab_Selector" on "Datasets_Info_Pane" wizard
+ Then verify "Overview_General_Headers" on "Datasets_Info_Pane" wizard should contains "Datasets_Info_Pane"."Overview_General_Headers"
+ Then check "latest" value in "tag" column in "Overview_Table" table on "Datasets_Info_Pane" wizard
+ Then click on "Edit_btn_table_view" element on "Datasets_Info_Pane" wizard
+ And wait load page
+ When type value "newTag" to "Version_tag_Input" field on "Datasets_Info_Pane" wizard
+ Then click on "Apply_Button" element on "Datasets_Info_Pane" wizard
+ Then click on "Apply_Changes_Button" element on "Datasets_Info_Pane" wizard
+ And wait load page
+ Then verify "Table_FilterBy_Button" element visibility on "Datasets" wizard
+ Then click on "Table_FilterBy_Button" element on "Datasets" wizard
+ Then select "newTag" option in "Table_Tree_Filter_Dropdown" dropdown on "Artifacts_FilterBy_Popup" wizard
+ Then click on "Apply_Button" element on "Artifacts_FilterBy_Popup" wizard
+ And wait load page
+ Then check "newTag" value in "tag" column in "Datasets_Table" table on "Datasets" wizard
+
+Scenario: MLD011 - Check that version tag has "Click to add" status when it's empty after edited
+ Given open url
+ And wait load page
+ And click on row root with value "churn-project-admin" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Datasets" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ When click on cell with row index 1 in "name" column in "Datasets_Table" table on "Datasets" wizard
+ Then verify "Info_Pane_Tab_Selector" on "Datasets_Info_Pane" wizard should contains "Datasets_Info_Pane"."Tab_List"
+ Then verify "Overview" tab is active in "Info_Pane_Tab_Selector" on "Datasets_Info_Pane" wizard
+ Then verify "Overview_General_Headers" on "Datasets_Info_Pane" wizard should contains "Datasets_Info_Pane"."Overview_General_Headers"
+ Then check "latest" value in "tag" column in "Overview_Table" table on "Datasets_Info_Pane" wizard
+ Then click on "Edit_btn_table_view" element on "Datasets_Info_Pane" wizard
+ Then type value "" to "Version_tag_Input" field on "Datasets_Info_Pane" wizard
+ Then click on "Apply_Button" element on "Datasets_Info_Pane" wizard
+ Then click on "Apply_Changes_Button" element on "Datasets_Info_Pane" wizard
+ And wait load page
+ Then click on "Table_FilterBy_Button" element on "Datasets" wizard
+ Then select "All" option in "Table_Tree_Filter_Dropdown" dropdown on "Artifacts_FilterBy_Popup" wizard
+ Then click on "Apply_Button" element on "Artifacts_FilterBy_Popup" wizard
+ And wait load page
+ When click on cell with row index 1 in "name" column in "Datasets_Table" table on "Datasets" wizard
+ And wait load page
+ Then "Version_Tag_Input_Placeholder" element on "Datasets_Info_Pane" should contains "Click to add" value
+
\ No newline at end of file
diff --git a/tests/features/featureStore.feature b/tests/features/featureStore.feature
index 0ceade38a..af999f199 100644
--- a/tests/features/featureStore.feature
+++ b/tests/features/featureStore.feature
@@ -3,7 +3,7 @@ Feature: Feature Store Page
Testcases that verifies functionality on Feature Store Page
@passive
- Scenario: Check all mandatory components on Feature Store tab
+ Scenario: MLFS001 - Check all mandatory components on Feature Store tab
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -33,7 +33,7 @@ Feature: Feature Store Page
Then "Create_Set_Button" element on "Feature_Store_Feature_Sets_Tab" should contains "Create Set" value
@passive
- Scenario: Check all mandatory components on Features tab
+ Scenario: MLFS002 - Check all mandatory components on Features tab
Given open url
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
And wait load page
@@ -64,7 +64,7 @@ Feature: Feature Store Page
Then "No_Data_Message" component on "commonPagesHeader" should contains "No_Data_Message"."No_Features_Yet"
@passive
- Scenario: Check all mandatory components on Feature Vectors tab
+ Scenario: MLFS003 - Check all mandatory components on Feature Vectors tab
Given open url
And click on row root with value "fsdemo-admin" in "name" column in "Projects_Table" table on "Projects" wizard
And wait load page
@@ -98,7 +98,7 @@ Feature: Feature Store Page
#TODO: verify values in "Labels_Table" table on "Feature_Sets_Info_Pane" wizard - AssertionError: should be expected "key1:value1" but actual value ":"
@passive
@inProgress
- Scenario: Check all mandatory components in Item infopane on Overview tab table on Feature Sets tab
+ Scenario: MLFS004 - Check all mandatory components in Item infopane on Overview tab table on Feature Sets tab
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -165,7 +165,7 @@ Feature: Feature Store Page
#TODO: 'Cancel_Button', 'Apply_Changes_Button' - reimplemented, editing is not allowed in Overview tab
@passive
@inProgress
- Scenario: Check all mandatory components in Item infopane on Overview tab table on Feature Vectors tab
+ Scenario: MLFS005 - Check all mandatory components in Item infopane on Overview tab table on Feature Vectors tab
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -201,7 +201,7 @@ Feature: Feature Store Page
#TODO: 'Cancel_Button', 'Apply_Changes_Button' - reimplemented, editing is not allowed in Overview tab
@passive
@inProgress
- Scenario: Check all mandatory components in Item infopane with non-latest tag on Overview tab table on Feature Vectors tab
+ Scenario: MLFS006 - Check all mandatory components in Item infopane with non-latest tag on Overview tab table on Feature Vectors tab
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -230,7 +230,7 @@ Feature: Feature Store Page
@FAILED_TODO
#TODO: 'Cancel_Button', 'Apply_Changes_Button' - reimplemented, allowed just after editing
@passive
- Scenario: Check all mandatory components in Item infopane on Features tab table
+ Scenario: MLFS007 - Check all mandatory components in Item infopane on Features tab table
Given open url
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
And wait load page
@@ -257,7 +257,7 @@ Feature: Feature Store Page
#TODO: 'Cancel_Button', 'Apply_Changes_Button' - reimplemented, allowed just after editing
@passive
@inProgress
- Scenario: Check all mandatory components in Item infopane on Transformations tab table
+ Scenario: MLFS008 - Check all mandatory components in Item infopane on Transformations tab table
Given open url
And click on row root with value "fraud-demo2-admin" in "name" column in "Projects_Table" table on "Projects" wizard
And wait load page
@@ -285,7 +285,7 @@ Feature: Feature Store Page
@FAILED_TODO
#TODO: 'Cancel_Button', 'Apply_Changes_Button' - reimplemented, allowed just after editing
@passive
- Scenario: Check all mandatory components in Item infopane on Preview tab table
+ Scenario: MLFS009 - Check all mandatory components in Item infopane on Preview tab table
Given open url
And click on row root with value "fsdemo-admin" in "name" column in "Projects_Table" table on "Projects" wizard
And wait load page
@@ -312,7 +312,7 @@ Feature: Feature Store Page
#TODO: 'Cancel_Button', 'Apply_Changes_Button' - reimplemented, allowed just after editing
@passive
@inProgress
- Scenario: Check all mandatory components in Item infopane on Statistics tab table
+ Scenario: MLFS010 - Check all mandatory components in Item infopane on Statistics tab table
Given open url
And click on row root with value "fsdemo-admin" in "name" column in "Projects_Table" table on "Projects" wizard
And wait load page
@@ -339,7 +339,7 @@ Feature: Feature Store Page
#TODO: 'Cancel_Button', 'Apply_Changes_Button' - reimplemented, allowed just after editing
@passive
@inProgress
- Scenario: Check all mandatory components in Item infopane on Analysis tab table
+ Scenario: MLFS011 - Check all mandatory components in Item infopane on Analysis tab table
Given open url
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
And wait load page
@@ -363,7 +363,7 @@ Feature: Feature Store Page
# TO DO: tab components too complicated for quick automatization
@passive
- Scenario: Check filtering by Name on Feature Store Feature Sets Tab
+ Scenario: MLFS012 - Check filtering by Name on Feature Store Feature Sets Tab
Given open url
And click on row root with value "fsdemo-admin" in "name" column in "Projects_Table" table on "Projects" wizard
And wait load page
@@ -382,10 +382,8 @@ Feature: Feature Store Page
And wait load page
And verify "No_Data_Message" element visibility on "commonPagesHeader" wizard
- @FAILED_TODO
- #TODO: test case will be passed if running on full screen (Labels could contain 'my-key' in dropdown on small screen)
@passive
- Scenario: Check filtering by Label on Feature Store Feature Sets Tab
+ Scenario: MLFS013 - Check filtering by Label on Feature Store Feature Sets Tab
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -402,7 +400,7 @@ Feature: Feature Store Page
Then type value "type=featureSet" to "Table_Label_Filter_Input" field on "Feature_Store_Feature_Sets_Tab" wizard
Then click on "Table_Refresh_Button" element on "Feature_Store_Feature_Sets_Tab" wizard
And wait load page
- Then value in "labels" column with "dropdowns" in "Feature_Sets_Table" on "Feature_Store_Feature_Sets_Tab" wizard should contains "type=featureSet"
+ Then value in "labels" column with "dropdowns" in "Feature_Sets_Table" on "Feature_Store_Feature_Sets_Tab" wizard should contains "type=featureSet" in "Overlay"
Then type value "v3io_user=123" to "Table_Label_Filter_Input" field on "Feature_Store_Feature_Sets_Tab" wizard
Then click on "Table_Refresh_Button" element on "Feature_Store_Feature_Sets_Tab" wizard
And wait load page
@@ -410,7 +408,7 @@ Feature: Feature Store Page
@passive
#TODO: should be updated with changeble Name "No_Data_Message" component on "commonPagesHeader" should contains "No_Data_Message"."Common_Message"
- Scenario: Check filtering by Name on Feature Store Features Tab
+ Scenario: MLFS014 - Check filtering by Name on Feature Store Features Tab
Given open url
And click on row root with value "fsdemo-admin" in "name" column in "Projects_Table" table on "Projects" wizard
And wait load page
@@ -430,7 +428,7 @@ Feature: Feature Store Page
Then "No_Data_Message" component on "commonPagesHeader" should contains "No_Data_Message"."Common_Message"
@passive
- Scenario: Check filtering by Label on Feature Store Features Tab
+ Scenario: MLFS015 - Check filtering by Label on Feature Store Features Tab
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -456,7 +454,7 @@ Feature: Feature Store Page
And verify "No_Data_Message" element visibility on "commonPagesHeader" wizard
@passive
- Scenario: Check filtering by Name on Feature Store Feature Vectors Tab
+ Scenario: MLFS016 - Check filtering by Name on Feature Store Feature Vectors Tab
Given open url
And click on row root with value "fsdemo-admin" in "name" column in "Projects_Table" table on "Projects" wizard
And wait load page
@@ -473,7 +471,7 @@ Feature: Feature Store Page
Then value in "name" column with "text" in "Feature_Vectors_Table" on "Feature_Store_Features_Vectors_Tab" wizard should contains "io"
@passive
- Scenario: Check filtering by Label on Feature Store Feature Vectors Tab
+ Scenario: MLFS017 - Check filtering by Label on Feature Store Feature Vectors Tab
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -499,7 +497,7 @@ Feature: Feature Store Page
And verify "No_Data_Message" element visibility on "commonPagesHeader" wizard
@passive
- Scenario: Check filtering by Tag on Feature Store Feature Sets Tab
+ Scenario: MLFS018 - Check filtering by Tag on Feature Store Feature Sets Tab
Given open url
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
And wait load page
@@ -515,7 +513,7 @@ Feature: Feature Store Page
Then value in "tag" column with "text" in "Feature_Sets_Table" on "Feature_Store_Feature_Sets_Tab" wizard should contains "my-tag"
@passive
- Scenario: Check filtering by Tag on Feature Store Feature Vectors Tab
+ Scenario: MLFS019 - Check filtering by Tag on Feature Store Feature Vectors Tab
Given open url
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
And wait load page
@@ -532,7 +530,7 @@ Feature: Feature Store Page
@passive
@inProgress
- Scenario: Check all mandatory components on Feature Store Feature Set new item wizard on Data Source Accordion Parquet Kind
+ Scenario: MLFS020 - Check all mandatory components on Feature Store Feature Set new item wizard on Data Source Accordion Parquet Kind
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -566,7 +564,7 @@ Feature: Feature Store Page
#TODO: there are no any "clean" fragment "clean" in "key" in artifacts.json
#TODO: URL_Combobox hint need change the text and behavior
@passive
- Scenario: Verify behaviour of Combobox element on Feature Store Feature Set new item wizard on Data Source Accordion
+ Scenario: MLFS021 - Verify behaviour of Combobox element on Feature Store Feature Set new item wizard on Data Source Accordion
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -610,7 +608,7 @@ Feature: Feature Store Page
@passive
@inProgress
- Scenario: Check all mandatory components on Schedule popup on Feature Store Feature Set new item wizard on Data Source Accordion Parquet Kind
+ Scenario: MLFS022 - Check all mandatory components on Schedule popup on Feature Store Feature Set new item wizard on Data Source Accordion Parquet Kind
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -647,7 +645,7 @@ Feature: Feature Store Page
@passive
@inProgress
- Scenario: Check all mandatory components on Feature Store Feature Set new item wizard
+ Scenario: MLFS023 - Check all mandatory components on Feature Store Feature Set new item wizard
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -701,7 +699,7 @@ Feature: Feature Store Page
@passive
@inProgress
- Scenario: Check Input and Dropdown components on Feature Store Feature Set new item wizard
+ Scenario: MLFS024 - Check Input and Dropdown components on Feature Store Feature Set new item wizard
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -727,7 +725,7 @@ Feature: Feature Store Page
Then verify "File_Type_Dropdown" element in "Target_Store_Accordion" on "New_Feature_Set" wizard should contains "New_Feature_Store"."Target_Store_File_Type"
@passive
- Scenario: Check Input and Dropdown components on Feature Store Feature Set new item wizard
+ Scenario: MLFS025 - Check Input and Dropdown components on Feature Store Feature Set new item wizard
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -746,7 +744,7 @@ Feature: Feature Store Page
@passive
@inProgress
- Scenario: Check Schema Accordion components on Feature Store Feature Set new item wizard
+ Scenario: MLFS026 - Check Schema Accordion components on Feature Store Feature Set new item wizard
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -772,7 +770,7 @@ Feature: Feature Store Page
@passive
@inProgress
- Scenario: Check Target Store Accordion components on Feature Store Feature Set new item wizard
+ Scenario: MLFS027 - Check Target Store Accordion components on Feature Store Feature Set new item wizard
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -845,7 +843,7 @@ Feature: Feature Store Page
#TODO: 'Online_Path_Annotation', 'Offline_Path_Annotation' - the implementation has changed
#TODO: 'Offline_Path' path value "v3io:///custom/offline/path" couldn't be apply - the implementation has changed
@passive
- Scenario: Verify behaviour of Online and Offline Target store on Feature Store Feature Set new item wizard
+ Scenario: MLFS028 - Verify behaviour of Online and Offline Target store on Feature Store Feature Set new item wizard
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -916,7 +914,7 @@ Feature: Feature Store Page
Then "Offline_Path" element in "Target_Store_Accordion" on "New_Feature_Set" should contains "v3io:///projects/default/FeatureStore/test-fs3/parquet/sets/test-fs3.parquet" value
@passive
- Scenario: Check Partition part in Target Store Accordion components on Feature Store Feature Set new item wizard
+ Scenario: MLFS029 - Check Partition part in Target Store Accordion components on Feature Store Feature Set new item wizard
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -961,7 +959,7 @@ Feature: Feature Store Page
Then is "External_Offline_Partition_Number_Of_Buckets_Radiobutton" in "Target_Store_Accordion" on "New_Feature_Set" selected
@passive
- Scenario: Test rows Labels on Feature Store Feature Set new item wizard
+ Scenario: MLFS030 - Test rows Labels on Feature Store Feature Set new item wizard
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -993,7 +991,7 @@ Feature: Feature Store Page
| key2\n:\nvalue2 |
@inProgress
- Scenario: Save new Feature Store Feature Set new item wizard
+ Scenario: MLFS031 - Save new Feature Store Feature Set new item wizard
* set tear-down property "project" created with "automation-test-name3" value
* create "automation-test-name3" MLRun Project with code 201
Given open url
@@ -1048,7 +1046,7 @@ Feature: Feature Store Page
@FAILED_TODO
#TODO: check "expand_btn" visibility in "Features_Table" on "Feature_Store_Features_Tab" - no such element: Unable to locate element:
@passive
- Scenario: Check expand button on Feature Store tab when change tag from "latest"
+ Scenario: MLFS032 - Check expand button on Feature Store tab when change tag from "latest"
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -1081,7 +1079,7 @@ Feature: Feature Store Page
Then check "expand_btn" not presented in "Feature_Vectors_Table" on "Feature_Store_Features_Vectors_Tab" wizard
@passive
- Scenario: Check MLRun logo redirection
+ Scenario: MLFS033 - Check MLRun logo redirection
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -1098,7 +1096,7 @@ Feature: Feature Store Page
@FAILED_TODO
#TODO: select "View YAML" option after click on "expand_btn" - moveTargetOutOfBoundsError: move target out of bounds
@passive
- Scenario: Verify View YAML action on Feature Sets tab
+ Scenario: MLFS034 - Verify View YAML action on Feature Sets tab
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -1121,10 +1119,8 @@ Feature: Feature Store Page
Then verify "YAML_Modal_Container" element visibility on "View_YAML" wizard
Then click on "Cross_Cancel_Button" element on "View_YAML" wizard
- @FAILED_TODO
- #TODO: select "View YAML" option - doesn't find the name in table
@passive
- Scenario: Verify View YAML action on Features tab
+ Scenario: MLFS035 - Verify View YAML action on Features tab
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -1145,7 +1141,7 @@ Feature: Feature Store Page
@FAILED_TODO
#TODO: select "View YAML" option after click on "expand_btn" - moveTargetOutOfBoundsError: move target out of bounds
@passive
- Scenario: Verify View YAML action on Feature Vectors tab
+ Scenario: MLFS036 - Verify View YAML action on Feature Vectors tab
Given open url
And wait load page
And click on row root with value "fsdemo-admin" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -1172,7 +1168,7 @@ Feature: Feature Store Page
Then click on "Cross_Cancel_Button" element on "View_YAML" wizard
@passive
- Scenario: Verify View YAML action in Item infopane on Feature Sets tab
+ Scenario: MLFS037 - Verify View YAML action in Item infopane on Feature Sets tab
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -1191,7 +1187,7 @@ Feature: Feature Store Page
Then verify "YAML_Modal_Container" element visibility on "View_YAML" wizard
@passive
- Scenario: Check all mandatory components on Add to feature vector popup
+ Scenario: MLFS038 - Check all mandatory components on Add to feature vector popup
Given open url
And click on row root with value "fsdemo-admin" in "name" column in "Projects_Table" table on "Projects" wizard
And wait load page
@@ -1217,7 +1213,7 @@ Feature: Feature Store Page
Then "Create_Feature_Vector_Button" element on "Add_To_Feature_Vector_Popup" should contains "Create new feature vector" value
@passive
- Scenario: Check all mandatory components on Create feature vector popup
+ Scenario: MLFS039 - Check all mandatory components on Create feature vector popup
Given open url
And click on row root with value "fsdemo-admin" in "name" column in "Projects_Table" table on "Projects" wizard
And wait load page
@@ -1269,7 +1265,7 @@ Feature: Feature Store Page
Then "Create_Button" element on "Create_Feature_Vector_Popup" should contains "Create" value
@passive
- Scenario: Check all mandatory components on Edit feature vector Popup
+ Scenario: MLFS040 - Check all mandatory components on Edit feature vector Popup
Given open url
And click on row root with value "fsdemo-admin" in "name" column in "Projects_Table" table on "Projects" wizard
And wait load page
@@ -1307,7 +1303,7 @@ Feature: Feature Store Page
Then "Feature_Vector_Tag" element on "Add_To_Feature_Vector_Tab" should contains "v2" value
@passive
- Scenario: Check all mandatory components on Add to feature vector tab
+ Scenario: MLFS041 - Check all mandatory components on Add to feature vector tab
Given open url
And click on row root with value "fsdemo-admin" in "name" column in "Projects_Table" table on "Projects" wizard
And wait load page
@@ -1347,7 +1343,7 @@ Feature: Feature Store Page
@FAILED_TODO
#TODO: value in "featureName" column with "text" contains "department" - doesn't search though table
@passive
- Scenario: Verify filtering by name and entity on Add to feature vector tab
+ Scenario: MLFS042 - Verify filtering by name and entity on Add to feature vector tab
Given open url
And click on row root with value "fsdemo-admin" in "name" column in "Projects_Table" table on "Projects" wizard
And wait load page
@@ -1376,7 +1372,7 @@ Feature: Feature Store Page
@FAILED_TODO
#TODO: click on "add_feature_btn" in "Add_To_Feature_Vector_Table" table - invalid selector: An invalid or illegal selector was specified
@inProgress
- Scenario: Add to feature vector
+ Scenario: MLFS043 - Add to feature vector
Given open url
And turn on demo mode
And click on row root with value "fsdemo-admin" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -1451,7 +1447,7 @@ Feature: Feature Store Page
@FAILED_TODO
#TODO: click on "add_feature_btn" in "Add_To_Feature_Vector_Table" table - invalid selector: An invalid or illegal selector was specified
@inProgress
- Scenario: Check all mandatory components in Item infopane on Requested Features tab on Feature Vectors tab
+ Scenario: MLFS044 - Check all mandatory components in Item infopane on Requested Features tab on Feature Vectors tab
Given open url
And turn on demo mode
And click on row root with value "fsdemo-admin" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -1540,7 +1536,7 @@ Feature: Feature Store Page
@FAILED_TODO
#TODO: click on "add_feature_btn" in "Add_To_Feature_Vector_Table" table - invalid selector: An invalid or illegal selector was specified
- Scenario: Verify Feature Label icon on Requested Features tab on Feature Vectors tab
+ Scenario: MLFS045 - Verify Feature Label icon on Requested Features tab on Feature Vectors tab
And set tear-down property "featureVector" created in "default" project with "test_vector" value
Given open url
And turn on demo mode
@@ -1571,7 +1567,7 @@ Feature: Feature Store Page
And wait load page
Then value in "labelIcon" column with "tooltip" in "Requested_Features_Table" on "Requested_Features_Info_Pane" wizard should contains "Label column"
- Scenario: Verify No Data message on Feature Store tabs
+ Scenario: MLFS046 - Verify No Data message on Feature Store tabs
* set tear-down property "project" created with "automation-test-name001" value
* create "automation-test-name001" MLRun Project with code 201
Given open url
@@ -1610,7 +1606,7 @@ Feature: Feature Store Page
And wait load page
Then "No_Data_Message" component on "commonPagesHeader" should contains "No_Data_Message"."No_Data"
- Scenario: Check broken link redirection
+ Scenario: MLFS047 - Check broken link redirection
* set tear-down property "project" created with "automation-test-010" value
* create "automation-test-010" MLRun Project with code 201
* set tear-down property "featureSet" created in "automation-test-010" project with "test_fs" value
@@ -1665,7 +1661,7 @@ Feature: Feature Store Page
Then verify redirection from "projects/automation-test-010/feature-store/feature-vectors/test_fv/latest/INVALID" to "projects/automation-test-010/feature-store/feature-vectors/test_fv/latest/overview"
Then verify redirection from "projects/automation-test-010/INVALID/feature-vectors/test_fv/latest/overview" to "projects"
- Scenario: Check active/highlited items with details panel on Feature Sets tab
+ Scenario: MLFS048 - Check active/highlited items with details panel on Feature Sets tab
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -1690,7 +1686,7 @@ Feature: Feature Store Page
Then save to context "name" column on 2 row from "Feature_Sets_Table" table on "Feature_Store_Feature_Sets_Tab" wizard
Then compare "Header" element value on "Models_Info_Pane" wizard with test "name" context value
- Scenario: Check active/highlited items with details panel on Feature Vectors tab
+ Scenario: MLFS049 - Check active/highlited items with details panel on Feature Vectors tab
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -1710,3 +1706,289 @@ Feature: Feature Store Page
Then save to context "name" column on 1 row from "Feature_Vectors_Table" table on "Feature_Store_Features_Vectors_Tab" wizard
Then compare "Header" element value on "Models_Info_Pane" wizard with test "name" context value
Then verify that row index 1 is active in "Feature_Vectors_Table" table on "Feature_Store_Features_Vectors_Tab" wizard
+
+ @passive
+ Scenario: MLFS050 - Save feature set with compleated target store components and passthrough checkbox by default
+ Given open url
+ And wait load page
+ And click on row root with value "churn-project-admin" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Feature store" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ And verify "Feature_Store_Tab_Selector" on "Feature_Store_Feature_Sets_Tab" wizard should contains "Feature_Store"."Tab_List"
+ And verify "Feature Sets" tab is active in "Feature_Store_Tab_Selector" on "Feature_Store_Feature_Sets_Tab" wizard
+ And click on "Create_Set_Button" element on "Feature_Store_Feature_Sets_Tab" wizard
+ Then verify "Passthrough_Checkbox" element visibility on "New_Feature_Set" wizard
+ Then verify checkbox "Passthrough_Checkbox_State" element on "New_Feature_Set" wizard is enabled
+ Then "Passthrough_Checkbox" element should be unchecked on "New_Feature_Set" wizard
+ Then verify "Online_Checkbox" element visibility in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then verify checkbox "Online_Checkbox_State" element on "New_Feature_Set" wizard is enabled
+ Then "Online_Checkbox" element should be checked in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then verify "Offline_Checkbox" element visibility in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then verify checkbox "Offline_Checkbox_State" element on "New_Feature_Set" wizard is enabled
+ Then "Offline_Checkbox" element should be checked in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then verify "Offline_Partition_Checkbox" element visibility in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then verify checkbox "Offline_Partition_Checkbox_State" element on "New_Feature_Set" wizard is enabled
+ Then "Offline_Partition_Checkbox" element should be unchecked in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then verify "External_Offline_Checkbox" element visibility in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then verify checkbox "External_Offline_Checkbox_State" element on "New_Feature_Set" wizard is enabled
+ Then "External_Offline_Checkbox" element should be unchecked in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then type value "new-feature-set-1" to "Feature_Set_Name_Input" field on "New_Feature_Set" wizard
+ Then select "MLRun store" option in "URL_Combobox" combobox on "Data_Source_Accordion" accordion on "New_Feature_Set" wizard
+ Then click on "Accordion_Header" element in "Data_Source_Accordion" on "New_Feature_Set" wizard
+ Then type value "text" to "Entities_Input" field on "Schema_Accordion" on "New_Feature_Set" wizard
+ Then click on "Save_Button" element on "New_Feature_Set" wizard
+ Then click on "Confirm_Button" element on "Common_Popup" wizard
+ Then "Header" element on "Feature_Sets_Info_Pane" should contains "new-feature-set-1" value
+
+ @passive
+ Scenario: MLFS051 - Save feature set with checked passthrough checkbox and unchecked TARGET STORE Online checkbox
+ Given open url
+ And wait load page
+ And click on row root with value "churn-project-admin" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Feature store" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ And verify "Feature_Store_Tab_Selector" on "Feature_Store_Feature_Sets_Tab" wizard should contains "Feature_Store"."Tab_List"
+ And verify "Feature Sets" tab is active in "Feature_Store_Tab_Selector" on "Feature_Store_Feature_Sets_Tab" wizard
+ And click on "Create_Set_Button" element on "Feature_Store_Feature_Sets_Tab" wizard
+ Then verify "Passthrough_Checkbox" element visibility on "New_Feature_Set" wizard
+ Then verify checkbox "Passthrough_Checkbox_State" element on "New_Feature_Set" wizard is enabled
+ Then "Passthrough_Checkbox" element should be unchecked on "New_Feature_Set" wizard
+ Then check "Passthrough_Checkbox" element on "New_Feature_Set" wizard
+ Then verify "Online_Checkbox" element visibility in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then verify checkbox "Online_Checkbox_State" element on "New_Feature_Set" wizard is enabled
+ Then "Online_Checkbox" element should be unchecked in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then verify "Offline_Checkbox" element visibility in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then verify checkbox "Offline_Checkbox_State" element on "New_Feature_Set" wizard is disabled
+ Then "Offline_Checkbox" element should be unchecked in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then verify "External_Offline_Checkbox" element visibility in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then verify checkbox "External_Offline_Checkbox_State" element on "New_Feature_Set" wizard is disabled
+ Then "External_Offline_Checkbox" element should be unchecked in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then type value "new-feature-set-2" to "Feature_Set_Name_Input" field on "New_Feature_Set" wizard
+ Then select "MLRun store" option in "URL_Combobox" combobox on "Data_Source_Accordion" accordion on "New_Feature_Set" wizard
+ Then click on "Accordion_Header" element in "Data_Source_Accordion" on "New_Feature_Set" wizard
+ Then type value "text" to "Entities_Input" field on "Schema_Accordion" on "New_Feature_Set" wizard
+ Then click on "Save_Button" element on "New_Feature_Set" wizard
+ Then click on "Confirm_Button" element on "Common_Popup" wizard
+ Then "Header" element on "Feature_Sets_Info_Pane" should contains "new-feature-set-2" value
+
+ @passive
+ Scenario: MLFS052 - Save feature set with checked passthrough checkbox and checked TARGET STORE Online checkbox
+ Given open url
+ And wait load page
+ And click on row root with value "churn-project-admin" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Feature store" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ And verify "Feature_Store_Tab_Selector" on "Feature_Store_Feature_Sets_Tab" wizard should contains "Feature_Store"."Tab_List"
+ And verify "Feature Sets" tab is active in "Feature_Store_Tab_Selector" on "Feature_Store_Feature_Sets_Tab" wizard
+ And click on "Create_Set_Button" element on "Feature_Store_Feature_Sets_Tab" wizard
+ Then verify "Passthrough_Checkbox" element visibility on "New_Feature_Set" wizard
+ Then verify checkbox "Passthrough_Checkbox_State" element on "New_Feature_Set" wizard is enabled
+ Then "Passthrough_Checkbox" element should be unchecked on "New_Feature_Set" wizard
+ Then check "Passthrough_Checkbox" element on "New_Feature_Set" wizard
+ Then verify "Online_Checkbox" element visibility in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then verify checkbox "Online_Checkbox_State" element on "New_Feature_Set" wizard is enabled
+ Then "Online_Checkbox" element should be unchecked in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then check "Online_Checkbox" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then "Online_Checkbox" element should be checked in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then verify "Offline_Checkbox" element visibility in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then verify checkbox "Offline_Checkbox_State" element on "New_Feature_Set" wizard is disabled
+ Then "Offline_Checkbox" element should be unchecked in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then verify "External_Offline_Checkbox" element visibility in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then verify checkbox "External_Offline_Checkbox_State" element on "New_Feature_Set" wizard is disabled
+ Then "External_Offline_Checkbox" element should be unchecked in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then type value "new-feature-set-3" to "Feature_Set_Name_Input" field on "New_Feature_Set" wizard
+ Then select "MLRun store" option in "URL_Combobox" combobox on "Data_Source_Accordion" accordion on "New_Feature_Set" wizard
+ Then click on "Accordion_Header" element in "Data_Source_Accordion" on "New_Feature_Set" wizard
+ Then type value "text" to "Entities_Input" field on "Schema_Accordion" on "New_Feature_Set" wizard
+ Then click on "Save_Button" element on "New_Feature_Set" wizard
+ Then click on "Confirm_Button" element on "Common_Popup" wizard
+ Then "Header" element on "Feature_Sets_Info_Pane" should contains "new-feature-set-3" value
+
+ @passive
+ Scenario: MLFS053 - Impossibility to save feature set with unchecked target store components
+ Given open url
+ And wait load page
+ And click on row root with value "churn-project-admin" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Feature store" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ And verify "Feature_Store_Tab_Selector" on "Feature_Store_Feature_Sets_Tab" wizard should contains "Feature_Store"."Tab_List"
+ And verify "Feature Sets" tab is active in "Feature_Store_Tab_Selector" on "Feature_Store_Feature_Sets_Tab" wizard
+ And click on "Create_Set_Button" element on "Feature_Store_Feature_Sets_Tab" wizard
+ Then type value "new-feature-set-4" to "Feature_Set_Name_Input" field on "New_Feature_Set" wizard
+ Then select "MLRun store" option in "URL_Combobox" combobox on "Data_Source_Accordion" accordion on "New_Feature_Set" wizard
+ Then click on "Accordion_Header" element in "Data_Source_Accordion" on "New_Feature_Set" wizard
+ Then type value "text" to "Entities_Input" field on "Schema_Accordion" on "New_Feature_Set" wizard
+ Then verify "Passthrough_Checkbox" element visibility on "New_Feature_Set" wizard
+ Then verify checkbox "Passthrough_Checkbox_State" element on "New_Feature_Set" wizard is enabled
+ Then "Passthrough_Checkbox" element should be unchecked on "New_Feature_Set" wizard
+ Then uncheck "Online_Checkbox" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then uncheck "Offline_Checkbox" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then "Error_Message" component in "Target_Store_Accordion" on "New_Feature_Set" should contains "Error_Messages"."Must_Select_One"
+ Then verify "Save_Button" element on "New_Feature_Set" wizard is disabled
+ Then verify "Save_And_Ingest_Button" element on "New_Feature_Set" wizard is disabled
+ Then click on "Cancel_Button" element on "New_Feature_Set" wizard
+ And click on "Create_Set_Button" element on "Feature_Store_Feature_Sets_Tab" wizard
+ Then verify "Passthrough_Checkbox" element visibility on "New_Feature_Set" wizard
+ Then verify checkbox "Passthrough_Checkbox_State" element on "New_Feature_Set" wizard is enabled
+ Then "Passthrough_Checkbox" element should be unchecked on "New_Feature_Set" wizard
+ Then check "Passthrough_Checkbox" element on "New_Feature_Set" wizard
+ Then uncheck "Passthrough_Checkbox" element on "New_Feature_Set" wizard
+ Then "Error_Message" component in "Target_Store_Accordion" on "New_Feature_Set" should contains "Error_Messages"."Must_Select_One"
+ Then verify "Save_Button" element on "New_Feature_Set" wizard is disabled
+ Then verify "Save_And_Ingest_Button" element on "New_Feature_Set" wizard is disabled
+ Then click on "Cancel_Button" element on "New_Feature_Set" wizard
+ And click on "Create_Set_Button" element on "Feature_Store_Feature_Sets_Tab" wizard
+ Then verify "Passthrough_Checkbox" element visibility on "New_Feature_Set" wizard
+ Then verify checkbox "Passthrough_Checkbox_State" element on "New_Feature_Set" wizard is enabled
+ Then "Passthrough_Checkbox" element should be unchecked on "New_Feature_Set" wizard
+ Then check "Offline_Partition_Checkbox" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then verify "Offline_Partition_ShowHide_Link" element visibility in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ When click on "Offline_Partition_ShowHide_Link" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ When uncheck "Offline_Partition_By_Time_Checkbox" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then "Error_Message" component in "Target_Store_Accordion" on "New_Feature_Set" should contains "Error_Messages"."Must_Select_One_Partition"
+ Then verify "Save_Button" element on "New_Feature_Set" wizard is disabled
+ Then verify "Save_And_Ingest_Button" element on "New_Feature_Set" wizard is disabled
+ Then uncheck "Offline_Partition_Checkbox" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then verify "Save_Button" element on "New_Feature_Set" wizard is enabled
+ Then verify "Save_And_Ingest_Button" element on "New_Feature_Set" wizard is enabled
+ Then click on "Cancel_Button" element on "New_Feature_Set" wizard
+ And click on "Create_Set_Button" element on "Feature_Store_Feature_Sets_Tab" wizard
+ Then verify "Passthrough_Checkbox" element visibility on "New_Feature_Set" wizard
+ Then verify checkbox "Passthrough_Checkbox_State" element on "New_Feature_Set" wizard is enabled
+ Then "Passthrough_Checkbox" element should be unchecked on "New_Feature_Set" wizard
+ Then check "External_Offline_Checkbox" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ When select "Parquet" option in "File_Type_Dropdown" dropdown on "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then "External_Offline_Partition_Checkbox" element should be unchecked in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ When check "External_Offline_Partition_Checkbox" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then verify "External_Offline_Partition_ShowHide_Link" element visibility in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ When click on "External_Offline_Partition_ShowHide_Link" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ When uncheck "External_Offline_Partition_By_Time_Checkbox" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then "Error_Message" component in "Target_Store_Accordion" on "New_Feature_Set" should contains "Error_Messages"."Must_Select_One_Partition"
+ Then verify "Save_Button" element on "New_Feature_Set" wizard is disabled
+ Then verify "Save_And_Ingest_Button" element on "New_Feature_Set" wizard is disabled
+ When uncheck "External_Offline_Partition_Checkbox" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then verify "Save_Button" element on "New_Feature_Set" wizard is enabled
+ Then verify "Save_And_Ingest_Button" element on "New_Feature_Set" wizard is enabled
+
+
+ @passive
+ Scenario: MLFS054 - Impossibility to save feature set without input mandatory Timestamp Key field
+ Given open url
+ And wait load page
+ And click on row root with value "churn-project-admin" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Feature store" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ And verify "Feature_Store_Tab_Selector" on "Feature_Store_Feature_Sets_Tab" wizard should contains "Feature_Store"."Tab_List"
+ And verify "Feature Sets" tab is active in "Feature_Store_Tab_Selector" on "Feature_Store_Feature_Sets_Tab" wizard
+ And click on "Create_Set_Button" element on "Feature_Store_Feature_Sets_Tab" wizard
+ Then type value "new-feature-set-5" to "Feature_Set_Name_Input" field on "New_Feature_Set" wizard
+ Then select "MLRun store" option in "URL_Combobox" combobox on "Data_Source_Accordion" accordion on "New_Feature_Set" wizard
+ Then click on "Accordion_Header" element in "Data_Source_Accordion" on "New_Feature_Set" wizard
+ Then type value "text" to "Entities_Input" field on "Schema_Accordion" on "New_Feature_Set" wizard
+ Then check "Offline_Partition_Checkbox" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then click on "Save_Button" element on "New_Feature_Set" wizard
+ Then verify "Save_Button" element on "New_Feature_Set" wizard is disabled
+ Then verify "Save_And_Ingest_Button" element on "New_Feature_Set" wizard is disabled
+ Then verify "Timestamp_Input" element in "Schema_Accordion" on "New_Feature_Set" wizard should display warning "Input_Hint"."Timestamp_Key_Warning"
+ Then type value "text" to "Timestamp_Input" field on "Schema_Accordion" on "New_Feature_Set" wizard
+ Then verify "Save_Button" element on "New_Feature_Set" wizard is enabled
+ Then verify "Save_And_Ingest_Button" element on "New_Feature_Set" wizard is enabled
+ Then click on "Save_Button" element on "New_Feature_Set" wizard
+ Then click on "Confirm_Button" element on "Common_Popup" wizard
+ And wait load page
+ Then "Header" element on "Feature_Sets_Info_Pane" should contains "new-feature-set-5" value
+ And click on "Create_Set_Button" element on "Feature_Store_Feature_Sets_Tab" wizard
+ Then type value "new-feature-set-6" to "Feature_Set_Name_Input" field on "New_Feature_Set" wizard
+ Then select "MLRun store" option in "URL_Combobox" combobox on "Data_Source_Accordion" accordion on "New_Feature_Set" wizard
+ Then click on "Accordion_Header" element in "Data_Source_Accordion" on "New_Feature_Set" wizard
+ Then type value "text" to "Entities_Input" field on "Schema_Accordion" on "New_Feature_Set" wizard
+ Then check "External_Offline_Checkbox" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ When select "Parquet" option in "File_Type_Dropdown" dropdown on "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then "External_Offline_Partition_Checkbox" element should be unchecked in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ When check "External_Offline_Partition_Checkbox" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then verify "URL_Input" element visibility in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then select "S3" option in "URL_Combobox" combobox on "Target_Store_Accordion" accordion on "New_Feature_Set" wizard
+ Then type value "text/text" to "URL_Combobox" field on "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then click on "Accordion_Header" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then click on "Save_Button" element on "New_Feature_Set" wizard
+ Then verify "Save_Button" element on "New_Feature_Set" wizard is disabled
+ Then verify "Save_And_Ingest_Button" element on "New_Feature_Set" wizard is disabled
+ Then verify "Timestamp_Input" element in "Schema_Accordion" on "New_Feature_Set" wizard should display warning "Input_Hint"."Timestamp_Key_Warning"
+ Then type value "text" to "Timestamp_Input" field on "Schema_Accordion" on "New_Feature_Set" wizard
+ Then verify "Save_Button" element on "New_Feature_Set" wizard is enabled
+ Then verify "Save_And_Ingest_Button" element on "New_Feature_Set" wizard is enabled
+ Then click on "Save_Button" element on "New_Feature_Set" wizard
+ Then click on "Confirm_Button" element on "Common_Popup" wizard
+ And wait load page
+ Then "Header" element on "Feature_Sets_Info_Pane" should contains "new-feature-set-6" value
+
+ @passive
+ Scenario: MLFS055 - Impossibility to save feature set without input 'Feature Set Name', 'URL', 'Entities' fields
+ Given open url
+ And wait load page
+ And click on row root with value "churn-project-admin" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Feature store" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ And verify "Feature_Store_Tab_Selector" on "Feature_Store_Feature_Sets_Tab" wizard should contains "Feature_Store"."Tab_List"
+ And verify "Feature Sets" tab is active in "Feature_Store_Tab_Selector" on "Feature_Store_Feature_Sets_Tab" wizard
+ And click on "Create_Set_Button" element on "Feature_Store_Feature_Sets_Tab" wizard
+ Then click on "Save_Button" element on "New_Feature_Set" wizard
+ Then verify "Feature_Set_Name_Input" on "New_Feature_Set" wizard should display options "Input_Hint"."Feature_Set_Name_Hint"
+ Then verify "URL_Combobox" element in "Data_Source_Accordion" on "New_Feature_Set" wizard should display warning "Input_Hint"."Input_Field_Require"
+ Then verify "Entities_Input" element in "Schema_Accordion" on "New_Feature_Set" wizard should display warning "Input_Hint"."Input_Field_Require"
+ Then verify "Save_Button" element on "New_Feature_Set" wizard is disabled
+ Then verify "Save_And_Ingest_Button" element on "New_Feature_Set" wizard is disabled
+
+ @forDevEnv
+ Scenario: MLFS056 - Save feature set with 'Save And Ingest' button
+ Given open url
+ And wait load page
+ #/// precondition - CREATE PROJECT///
+ Then click on "New_Project_Button" element on "Projects" wizard
+ Then type into "Name_Input" on "Create_New_Project" popup dialog "automation-test-name201" value
+ Then click on "Create_Button" element on "Create_New_Project" wizard
+ And click on row root with value "automation-test-name201" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Feature store" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ And verify "Feature_Store_Tab_Selector" on "Feature_Store_Feature_Sets_Tab" wizard should contains "Feature_Store"."Tab_List"
+ And verify "Feature Sets" tab is active in "Feature_Store_Tab_Selector" on "Feature_Store_Feature_Sets_Tab" wizard
+ And click on "Create_Set_Button" element on "Feature_Store_Feature_Sets_Tab" wizard
+ Then type value "new-feature-set-1" to "Feature_Set_Name_Input" field on "New_Feature_Set" wizard
+ Then select "MLRun store" option in "URL_Combobox" combobox on "Data_Source_Accordion" accordion on "New_Feature_Set" wizard
+ Then click on "Accordion_Header" element in "Data_Source_Accordion" on "New_Feature_Set" wizard
+ Then type value "text" to "Entities_Input" field on "Schema_Accordion" on "New_Feature_Set" wizard
+ Then check "Offline_Partition_Checkbox" element in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then click on "Save_Button" element on "New_Feature_Set" wizard
+ Then verify "Save_Button" element on "New_Feature_Set" wizard is disabled
+ Then verify "Save_And_Ingest_Button" element on "New_Feature_Set" wizard is disabled
+ Then verify "Timestamp_Input" element in "Schema_Accordion" on "New_Feature_Set" wizard should display warning "Input_Hint"."Timestamp_Key_Warning"
+ Then type value "text" to "Timestamp_Input" field on "Schema_Accordion" on "New_Feature_Set" wizard
+ Then verify "Save_Button" element on "New_Feature_Set" wizard is enabled
+ Then verify "Save_And_Ingest_Button" element on "New_Feature_Set" wizard is enabled
+ Then click on "Save_And_Ingest_Button" element on "New_Feature_Set" wizard
+ Then click on "Confirm_Button" element on "Common_Popup" wizard
+ And wait load page
+ Then "Header" element on "Feature_Sets_Info_Pane" should contains "new-feature-set-1" value
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Jobs and workflows" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ Then value in "name" column with "text" in "Jobs_Monitor_Table" on "Jobs_Monitor_Tab" wizard should contains "new-feature-set-1-ingest"
+ #///postcondition - DELETE PROJECT///
+ Then check "automation-test-name201" value in "name" column in "Projects_Table" table on "Projects" wizard
+ Then select "Delete" option in action menu on "Projects" wizard in "Projects_Table" table at row with "automation-test-name201" value in "name" column
+ Then verify if "Common_Popup" popup dialog appears
+ Then click on "Delete_Button" element on "Common_Popup" wizard
+ Then check "automation-test-name201" value not in "name" column in "Projects_Table" table on "Projects" wizard
\ No newline at end of file
diff --git a/tests/features/files.feature b/tests/features/files.feature
index 3eece6f74..1708b1c14 100644
--- a/tests/features/files.feature
+++ b/tests/features/files.feature
@@ -2,10 +2,8 @@ Feature: Files Page
Testcases that verifies functionality on Files Page
- @FAILED_TODO
- #TODO: 'Table_Label_Filter_Input', 'Table_Tree_Filter_Dropdown', 'Show_Iterations_Checkbox' elements were redesigned (located in dropdown filter), need tests rewrite
@passive
- Scenario: Check all mandatory components on Artifacts tab
+ Scenario: MLA001 - Check all mandatory components on Artifacts tab
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -20,17 +18,18 @@ Feature: Files Page
And wait load page
Then verify breadcrumbs "tab" label should be equal "Artifacts" value
Then verify "Table_Name_Filter_Input" element visibility on "Files" wizard
- Then verify "Table_Label_Filter_Input" element visibility on "Files" wizard
- Then verify "Table_Tree_Filter_Dropdown" element visibility on "Files" wizard
- Then verify "Show_Iterations_Checkbox" element visibility on "Files" wizard
+ Then click on "Table_FilterBy_Button" element on "Files" wizard
+ Then verify "Table_Label_Filter_Input" element visibility on "Artifacts_FilterBy_Popup" wizard
+ Then verify "Table_Tree_Filter_Dropdown" element visibility on "Artifacts_FilterBy_Popup" wizard
+ Then verify "Show_Iterations_Checkbox" element visibility on "Artifacts_FilterBy_Popup" wizard
Then verify "Table_Refresh_Button" element visibility on "Files" wizard
Then verify "Files_Table" element visibility on "Files" wizard
Then verify "Register_File_Button" element visibility on "Files" wizard
Then "Register_File_Button" element on "Files" should contains "Register Artifact" value
- Then verify "Table_Tree_Filter_Dropdown" dropdown element on "Files" wizard should contains "Dropdown_Options"."Tag_Filer_Options"
+ Then verify "Table_Tree_Filter_Dropdown" dropdown element on "Artifacts_FilterBy_Popup" wizard should contains "Dropdown_Options"."Tag_Filer_Options"
@passive
- Scenario: verify filtering by file name on Artifacts page
+ Scenario: MLA002 - Verify filtering by file name on Artifacts page
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -50,10 +49,8 @@ Feature: Files Page
And wait load page
Then value in "name" column with "text" in "Files_Table" on "Files" wizard should contains "test"
- @FAILED_TODO
- #TODO: 'Table_Label_Filter_Input' element were redesigned (located in dropdown filter), need tests rewrite
@passive
- Scenario: verify filtering by file label on Artifacts page
+ Scenario: MLA003 - Verify filtering by file label on Artifacts page
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -63,43 +60,51 @@ Feature: Files Page
And wait load page
And select "tab" with "Artifacts" value in breadcrumbs menu
And wait load page
- Then type value "owner" to "Table_Label_Filter_Input" field on "Files" wizard
- Then click on "Table_Refresh_Button" element on "Files" wizard
+ Then click on "Table_FilterBy_Button" element on "Files" wizard
+ Then type value "owner" to "Table_Label_Filter_Input" field on "Artifacts_FilterBy_Popup" wizard
+ Then click on "Apply_Button" element on "Artifacts_FilterBy_Popup" wizard
And wait load page
Then value in "labels" column with "dropdowns" in "Files_Table" on "Files" wizard should contains "owner"
- Then type value "v3io_user=admin" to "Table_Label_Filter_Input" field on "Files" wizard
- Then click on "Table_Refresh_Button" element on "Files" wizard
+ Then click on "Table_FilterBy_Button" element on "Files" wizard
+ Then type value "v3io_user=admin" to "Table_Label_Filter_Input" field on "Artifacts_FilterBy_Popup" wizard
+ Then click on "Apply_Button" element on "Artifacts_FilterBy_Popup" wizard
And wait load page
Then value in "labels" column with "dropdowns" in "Files_Table" on "Files" wizard should contains "v3io_user=admin"
- Then type value "v3io_user=123" to "Table_Label_Filter_Input" field on "Files" wizard
- Then click on "Table_Refresh_Button" element on "Files" wizard
+ Then click on "Table_FilterBy_Button" element on "Files" wizard
+ Then type value "v3io_user=123" to "Table_Label_Filter_Input" field on "Artifacts_FilterBy_Popup" wizard
+ Then click on "Apply_Button" element on "Artifacts_FilterBy_Popup" wizard
And wait load page
And verify "No_Data_Message" element visibility on "commonPagesHeader" wizard
+ Then "No_Data_Message" component on "commonPagesHeader" should contains "No_Data_Message"."No_Files_data"
- @FAILED_TODO
- #TODO: 'Show_Iterations_Checkbox' element were redesigned (located in dropdown filter), need tests rewrite
@passive
- Scenario: Verify behaviour of Show iterations checkbox on Artifacts tab
+ Scenario: MLA004 - Verify behaviour of Show iterations checkbox on Artifacts tab
Given open url
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
And wait load page
And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
And click on cell with value "Artifacts" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
And wait load page
- Then verify "Show_Iterations_Checkbox" element visibility on "Files" wizard
+ Then click on "Table_FilterBy_Button" element on "Files" wizard
+ Then verify "Show_Iterations_Checkbox" element visibility on "Artifacts_FilterBy_Popup" wizard
Then check "expand_btn" not presented in "Files_Table" on "Files" wizard
- Then check "Show_Iterations_Checkbox" element on "Files" wizard
+ Then uncheck "Show_Iterations_Checkbox" element on "Artifacts_FilterBy_Popup" wizard
+ Then click on "Apply_Button" element on "Artifacts_FilterBy_Popup" wizard
And wait load page
- Then "Show_Iterations_Checkbox" element should be checked on "Files" wizard
+ Then click on "Table_FilterBy_Button" element on "Files" wizard
+ Then "Show_Iterations_Checkbox" element should be unchecked on "Artifacts_FilterBy_Popup" wizard
Then check "expand_btn" visibility in "Files_Table" on "Files" wizard
Then click on cell with row index 1 in "expand_btn" column in "Files_Table" table on "Files" wizard
And wait load page
Then click on cell with row index 1 in "name" column in "Files_Table" table on "Files" wizard
Then verify "Header" element visibility on "Files_Info_Pane" wizard
- Then uncheck "Show_Iterations_Checkbox" element on "Files" wizard
+ Then click on "Table_FilterBy_Button" element on "Files" wizard
+ Then check "Show_Iterations_Checkbox" element on "Artifacts_FilterBy_Popup" wizard
+ Then click on "Apply_Button" element on "Artifacts_FilterBy_Popup" wizard
And wait load page
Then verify "Header" element not exists on "Files_Info_Pane" wizard
- Then "Show_Iterations_Checkbox" element should be unchecked on "Files" wizard
+ Then click on "Table_FilterBy_Button" element on "Files" wizard
+ Then "Show_Iterations_Checkbox" element should be checked on "Artifacts_FilterBy_Popup" wizard
Then check "expand_btn" not presented in "Files_Table" on "Files" wizard
@FAILED_TODO
@@ -107,7 +112,7 @@ Feature: Files Page
#TODO: 'Target_Path_Input' implementstion with dropdown before input, rewrite test case
@passive
@inProgress
- Scenario: Check all mandatory components on Register Artifacts Popup
+ Scenario: MLA005 - Check all mandatory components on Register Artifacts Popup
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -183,7 +188,7 @@ Feature: Files Page
@FAILED_TODO
#TODO: 'Target_Path_Input' implementstion with dropdown before input, rewrite test case
- Scenario: Verify behaviour on Register new Artifact
+ Scenario: MLA006 - Verify behaviour on Register new Artifact
* set tear-down property "project" created with "automation-test" value
* create "automation-test" MLRun Project with code 201
Given open url
@@ -209,7 +214,7 @@ Feature: Files Page
@passive
@inProgress
- Scenario: Check all mandatory components in Item infopane on Overview tab table
+ Scenario: MLA007 - Check all mandatory components in Item infopane on Overview tab table
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -226,12 +231,15 @@ Feature: Files Page
Then verify "Updated" element visibility on "Files_Info_Pane" wizard
Then verify "Download_Button" element visibility on "Files_Info_Pane" wizard
Then verify "Cross_Close_Button" element visibility on "Files_Info_Pane" wizard
+ Then verify "Full_View_Button" element visibility on "Files_Info_Pane" wizard
Then verify "Overview_General_Headers" on "Files_Info_Pane" wizard should contains "Files_Info_Pane"."Overview_General_Headers"
Then verify "Overview_Hash_Header" on "Files_Info_Pane" wizard should display "Label_Hint"."Overview_Hash"
Then verify "Overview_UID_Header" on "Files_Info_Pane" wizard should display "Label_Hint"."Overview_UID"
+ Then click on "Full_View_Button" element on "Files_Info_Pane" wizard
+ Then verify "Cross_Close_Button" element not exists on "Files_Info_Pane" wizard
+ Then click on "Tabel_View_Button" element on "Files_Info_Pane" wizard
+ Then verify "Cross_Close_Button" element visibility on "Files_Info_Pane" wizard
- @FAILED_TODO
- #TODO: 'Table_Tree_Filter_Dropdown' element were redesigned (located in dropdown filter), need tests rewrite
@passive
Scenario: Check Details panel still active on page refresh
* set tear-down property "project" created with "automation-test" value
@@ -245,7 +253,9 @@ Feature: Files Page
And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
And click on cell with value "Artifacts" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
And wait load page
- Then select "v1" option in "Table_Tree_Filter_Dropdown" dropdown on "Files" wizard
+ Then click on "Table_FilterBy_Button" element on "Files" wizard
+ Then select "v1" option in "Table_Tree_Filter_Dropdown" dropdown on "Artifacts_FilterBy_Popup" wizard
+ Then click on "Apply_Button" element on "Artifacts_FilterBy_Popup" wizard
And wait load page
When click on cell with value "test-file" in "name" column in "Files_Table" table on "Files" wizard
Then verify "Info_Pane_Tab_Selector" element visibility on "Files_Info_Pane" wizard
@@ -312,8 +322,6 @@ Feature: Files Page
And wait load page
Then verify "Projects_Table" element visibility on "Projects" wizard
- @FAILED_TODO
- #TODO: Show_Iterations_Checkbox elements were redesigned (located in dropdown filter), need tests rewrite
@passive
Scenario: Verify View YAML action
Given open url
@@ -329,9 +337,12 @@ Feature: Files Page
Then verify "Cross_Cancel_Button" element visibility on "View_YAML" wizard
Then verify "YAML_Modal_Container" element visibility on "View_YAML" wizard
Then click on "Cross_Cancel_Button" element on "View_YAML" wizard
- Then check "Show_Iterations_Checkbox" element on "Files" wizard
+ Then click on "Table_FilterBy_Button" element on "Files" wizard
+ Then uncheck "Show_Iterations_Checkbox" element on "Artifacts_FilterBy_Popup" wizard
+ Then click on "Apply_Button" element on "Artifacts_FilterBy_Popup" wizard
+ And wait load page
Then click on cell with row index 1 in "expand_btn" column in "Files_Table" table on "Files" wizard
- Then select "View YAML" option in action menu on "Files" wizard in "Files_Table" table at row with "latest #0" value in "name" column
+ Then select "View YAML" option in action menu on "Files" wizard in "Files_Table" table at row with "latest" value in "name_expand_btn" column
Then verify if "View_YAML" popup dialog appears
Then verify "Cross_Cancel_Button" element visibility on "View_YAML" wizard
Then verify "YAML_Modal_Container" element visibility on "View_YAML" wizard
@@ -403,3 +414,78 @@ Feature: Files Page
Then verify "Header" element visibility on "Models_Info_Pane" wizard
Then save to context "name" column on 2 row from "Files_Table" table on "Files" wizard
Then compare "Header" element value on "Models_Info_Pane" wizard with test "name" context value
+
+ Scenario: MLA009 - Check that version tag is filled when edit it in table view and full view on Overview tab table on Artifacts page
+ Given open url
+ And wait load page
+ And click on row root with value "churn-project-admin" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Artifacts" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And hover "MLRun_Logo" component on "commonPagesHeader" wizard
+ And wait load page
+ When click on cell with row index 1 in "name" column in "Files_Table" table on "Files" wizard
+ Then verify "Info_Pane_Tab_Selector" on "Files_Info_Pane" wizard should contains "Files_Info_Pane"."Tab_List"
+ Then verify "Overview" tab is active in "Info_Pane_Tab_Selector" on "Files_Info_Pane" wizard
+ Then verify "Overview_General_Headers" on "Files_Info_Pane" wizard should contains "Files_Info_Pane"."Overview_General_Headers"
+ Then check "latest" value in "tag" column in "Overview_Table" table on "Files_Info_Pane" wizard
+ Then click on "Edit_btn_table_view" element on "Files_Info_Pane" wizard
+ Then verify "Version_tag_Input_table_view" on "Files_Info_Pane" wizard should contains "latest" value
+ Then click on "Full_View_Button" element on "Files_Info_Pane" wizard
+ Then verify "Cross_Close_Button" element not exists on "Files_Info_Pane" wizard
+ Then click on "Edit_btn_full_view" element on "Files_Info_Pane" wizard
+ Then verify "Version_tag_Input_full_view" on "Files_Info_Pane" wizard should contains "latest" value
+ Then click on "Tabel_View_Button" element on "Files_Info_Pane" wizard
+ Then verify "Cross_Close_Button" element visibility on "Files_Info_Pane" wizard
+
+ Scenario: MLA010 - Check that version tag dropdown shows all tags on filters wizard on Artifacts page
+ Given open url
+ And wait load page
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Artifacts" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ When click on cell with row index 1 in "name" column in "Files_Table" table on "Files" wizard
+ Then verify "Info_Pane_Tab_Selector" on "Files_Info_Pane" wizard should contains "Files_Info_Pane"."Tab_List"
+ Then verify "Overview" tab is active in "Info_Pane_Tab_Selector" on "Files_Info_Pane" wizard
+ Then verify "Overview_General_Headers" on "Files_Info_Pane" wizard should contains "Files_Info_Pane"."Overview_General_Headers"
+ Then check "latest" value in "tag" column in "Overview_Table" table on "Files_Info_Pane" wizard
+ Then click on "Edit_btn_table_view" element on "Files_Info_Pane" wizard
+ And wait load page
+ When type value "newTag" to "Version_tag_Input" field on "Files_Info_Pane" wizard
+ Then click on "Apply_Button" element on "Files_Info_Pane" wizard
+ Then click on "Apply_Changes_Button" element on "Files_Info_Pane" wizard
+ And wait load page
+ Then verify "Table_FilterBy_Button" element visibility on "Files" wizard
+ Then click on "Table_FilterBy_Button" element on "Files" wizard
+ Then select "newTag" option in "Table_Tree_Filter_Dropdown" dropdown on "Artifacts_FilterBy_Popup" wizard
+ Then click on "Apply_Button" element on "Artifacts_FilterBy_Popup" wizard
+ And wait load page
+ Then check "newTag" value in "tag" column in "Files_Table" table on "Files" wizard
+
+Scenario: MLA011 - Check that version tag has "Click to add" status when it's empty after edited
+ Given open url
+ And wait load page
+ And click on row root with value "churn-project-admin" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Artifacts" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ When click on cell with row index 1 in "name" column in "Files_Table" table on "Files" wizard
+ Then verify "Info_Pane_Tab_Selector" on "Files_Info_Pane" wizard should contains "Files_Info_Pane"."Tab_List"
+ Then verify "Overview" tab is active in "Info_Pane_Tab_Selector" on "Files_Info_Pane" wizard
+ Then verify "Overview_General_Headers" on "Files_Info_Pane" wizard should contains "Files_Info_Pane"."Overview_General_Headers"
+ Then check "latest" value in "tag" column in "Overview_Table" table on "Files_Info_Pane" wizard
+ Then click on "Edit_btn_table_view" element on "Files_Info_Pane" wizard
+ Then type value "" to "Version_tag_Input" field on "Files_Info_Pane" wizard
+ Then click on "Apply_Button" element on "Files_Info_Pane" wizard
+ Then click on "Apply_Changes_Button" element on "Files_Info_Pane" wizard
+ And wait load page
+ Then click on "Table_FilterBy_Button" element on "Files" wizard
+ Then select "All" option in "Table_Tree_Filter_Dropdown" dropdown on "Artifacts_FilterBy_Popup" wizard
+ Then click on "Apply_Button" element on "Artifacts_FilterBy_Popup" wizard
+ And wait load page
+ When click on cell with row index 1 in "name" column in "Files_Table" table on "Files" wizard
+ And wait load page
+ Then "Version_Tag_Input_Placeholder" element on "Files_Info_Pane" should contains "Click to add" value
\ No newline at end of file
diff --git a/tests/features/jobsAndWorkflows.feature b/tests/features/jobsAndWorkflows.feature
index 85ca7f202..d1d7a9581 100644
--- a/tests/features/jobsAndWorkflows.feature
+++ b/tests/features/jobsAndWorkflows.feature
@@ -3,7 +3,7 @@ Feature: Jobs and workflows
Testcases that verifies functionality on Jobs and Workflows Pages
@passive
- Scenario: Check all mandatory components on Jobs Monitor tab
+ Scenario: MLJW001 - Check all mandatory components on Jobs Monitor tab
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -36,7 +36,7 @@ Feature: Jobs and workflows
Then verify "Jobs_Monitor_Table" element visibility on "Jobs_Monitor_Tab" wizard
@passive
- Scenario: Check all mandatory components on Workflows Monitor tab
+ Scenario: MLJW002 - Check all mandatory components on Workflows Monitor tab
Given open url
And turn on demo mode
And wait load page
@@ -58,7 +58,7 @@ Feature: Jobs and workflows
Then verify "Workflows_Monitor_Table" element visibility on "Workflows_Monitor_Tab" wizard
@passive
- Scenario: Check all mandatory components on Schedule Monitor tab
+ Scenario: MLJW003 - Check all mandatory components on Schedule Monitor tab
Given open url
And turn on demo mode
And wait load page
@@ -83,7 +83,7 @@ Feature: Jobs and workflows
Then verify "Schedule_Monitor_Table" element visibility on "Schedule_Monitor_Tab" wizard
@passive
- Scenario: Check date picker dropdown options on Jobs Monitor tab
+ Scenario: MLJW004 - Check date picker dropdown options on Jobs Monitor tab
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -106,7 +106,7 @@ Feature: Jobs and workflows
Then verify "Date_Time_Picker" element visibility on "Jobs_Monitor_Tab" wizard
@passive
- Scenario: verify date picker element on Jobs Monitor tab
+ Scenario: MLJW005 - Verify date picker element on Jobs Monitor tab
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -126,7 +126,7 @@ Feature: Jobs and workflows
Then verify error message in "Date_Time_Picker" on "Jobs_Monitor_Tab" wizard with value "Date_Time_Picker"."Error_Message"
@passive
- Scenario: verify filtering by job name on Jobs Monitor tab
+ Scenario: MLJW006 - Verify filtering by job name on Jobs Monitor tab
Given open url
And wait load page
And wait load page
@@ -143,7 +143,7 @@ Feature: Jobs and workflows
Then value in "name" column with "text" in "Jobs_Monitor_Table" on "Jobs_Monitor_Tab" wizard should contains "test"
@passive
- Scenario: verify filtering by job name on Schedule Monitor tab
+ Scenario: MLJW007 - Verify filtering by job name on Schedule Monitor tab
Given open url
And wait load page
And click on row root with value "churn-project-admin" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -161,7 +161,7 @@ Feature: Jobs and workflows
Then value in "name" column with "text" in "Schedule_Monitor_Table" on "Schedule_Monitor_Tab" wizard should contains "test"
@passive
- Scenario: verify filtering by name on Workflows Monitor tab
+ Scenario: MLJW008 - Verify filtering by name on Workflows Monitor tab
Given open url
And wait load page
And click on row root with value "cat-vs-dog-classification" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -186,7 +186,7 @@ Feature: Jobs and workflows
#TODO: need to rewrite test - "labels" column with "dropdowns" contains "author" not just in dropdown, add capture for all data in "labels" column
#TODO: also run just on full screen, because of scroll
@passive
- Scenario: verify filtering by job label with key on Jobs Monitor tab
+ Scenario: MLJW009 - Verify filtering by job label with key on Jobs Monitor tab
Given open url
And wait load page
And click on row root with value "cat-vs-dog-classification" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -212,7 +212,7 @@ Feature: Jobs and workflows
@passive
@inProgress
- Scenario: verify filtering by job label with key on Schedule tab
+ Scenario: MLJW010 - Verify filtering by job label with key on Schedule tab
Given open url
And wait load page
And click on row root with value "churn-project-admin" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -235,7 +235,7 @@ Feature: Jobs and workflows
@passive
#TODO: run just on full screen, because of scroll
- Scenario: verify filtering by job status on Jobs Monitor tab
+ Scenario: MLJW011 - Verify filtering by job status on Jobs Monitor tab
Given open url
And wait load page
And click on row root with value "cat-vs-dog-classification" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -895,7 +895,7 @@ Feature: Jobs and workflows
| key | value |
| key2edited | value2edited |
| key4edited | value4edited |
-
+ #TODO: Pods_Toleration is deleted from implementation
@passive
Scenario: verify mandatory elements in Resources Accordion on Create New Jobs side panel
Given open url
@@ -1729,7 +1729,7 @@ Feature: Jobs and workflows
@passive
@links
- Scenario: Check redirect to project`s Function Infopane from Job Overview
+ Scenario: MLJW030 - Check redirect to project`s Function Infopane from Job Overview
Given open url
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
And wait load page
@@ -1745,6 +1745,22 @@ Feature: Jobs and workflows
And wait load page
Then verify "key" values "Name,Hash" values from "Overview_Headers" on "ML_Function_Info_Pane" with "link" context value
Then compare current browser URL with test "href" context value
+ Then click on "Cross_Close_Button" element on "ML_Function_Info_Pane" wizard
+ Then select "Delete" option in action menu on "ML_Functions" wizard in "Functions_Table" table at row with "aggregate" value in "name" column
+ And wait load page
+ Then "Title" element on "Common_Popup" should contains "Delete function?" value
+ Then verify "Delete_Button" element visibility on "Common_Popup" wizard
+ Then click on "Delete_Button" element on "Common_Popup" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ Then click on "Project_Monitoring_Button" element on "commonPagesHeader" wizard
+ And hover "MLRun_Logo" component on "commonPagesHeader" wizard
+ When click on cell with value "aggregate-test" in "name" column in "Jobs_And_Workflows" table on "Project" wizard
+ And wait load page
+ When click on "link" value where option is "Function" in "Overview_Headers" on "Jobs_Monitor_Tab_Info_Pane" wizard
+ And wait load page
+ Then verify redirection to "projects/default/functions"
+ And wait load page
@FAILED_TODO
#TODO: create "test-scheduled" Schedule in "automation-test" project - createAPISchedule, newJobTemplate creating error
@@ -2007,3 +2023,914 @@ Feature: Jobs and workflows
Then verify redirection from "projects/churn-project-admin/jobs/monitor-workflows/workflow/INVALID/e3195358eaed416f8469451d8390ba19/overview" to "projects/churn-project-admin/jobs/monitor-workflows"
Then verify redirection from "projects/churn-project-admin/jobs/monitor-workflows/workflow/eaae138e-439a-47fa-93c6-ba0fe1dc3b79/INVALID/overview" to "projects/churn-project-admin/jobs/monitor-workflows"
Then verify redirection from "projects/INVALID/jobs/monitor-workflows/workflow/eaae138e-439a-47fa-93c6-ba0fe1dc3b79/e3195358eaed416f8469451d8390ba19/overview" to "projects"
+
+ Scenario: MLJW012 - Check all mandatory components on Batch Run wizard - Function selection
+ Given open url
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Jobs and workflows" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ And click on "Butch_Run_Button" element on "Jobs_Monitor_Tab" wizard
+ And wait load page
+ Then verify "Batch_Run_Header" element visibility on "Batch_Run" wizard
+ Then verify "Cross_Close_Button" element visibility on "Batch_Run" wizard
+ Then verify "Batch_Run_Wizard_Steps" element visibility on "Batch_Run" wizard
+ Then verify "Form_Header_Batch_Run" element visibility on "Batch_Run" wizard
+ Then "Form_Header_Batch_Run" element on "Batch_Run" should contains "Function selection" value
+ Then verify "BatchRun_Tab_Selector" on "Batch_Run" wizard should contains "Batch_Run"."Tab_List"
+ Then verify "Step_1_Button" element on "Batch_Run" wizard is enabled
+ Then verify "Step_2_Button" element on "Batch_Run" wizard is disabled
+ Then verify "Step_3_Button" element on "Batch_Run" wizard is disabled
+ Then verify "Step_4_Button" element on "Batch_Run" wizard is disabled
+ Then verify "Step_5_Button" element on "Batch_Run" wizard is disabled
+ Then verify "Step_6_Button" element on "Batch_Run" wizard is disabled
+ Then verify "Search_Input" element visibility on "Batch_Run" wizard
+ When type searchable fragment "test" into "Search_Input" on "Batch_Run" wizard
+ Then searchable case "sensitive" fragment "test" should be in every suggested option into "Search_Input" on "Batch_Run" wizard
+ Then value in "name" column with "text" in "Functions_Table" on "Batch_Run" wizard should contains "test"
+ When click on "Form_Header_Batch_Run" element on "Batch_Run" wizard
+ Then verify "Project_Selector_Dropdown" element visibility on "Batch_Run" wizard
+ Then select "churn-project-admin" option in "Project_Selector_Dropdown" filter dropdown on "Batch_Run" wizard
+ Then value in "sub_name" column with "text" in "Functions_Table" on "Batch_Run" wizard should contains "churn-project-admin"
+ Then select "Current (default)" option in "Project_Selector_Dropdown" filter dropdown on "Batch_Run" wizard
+ And wait load page
+ And click on row root with value "test" in "name" column in "Functions_Table" table on "Batch_Run" wizard
+ Then "Function_Title" element on "Batch_Run" should contains "test" value
+ Then select "Hub" tab in "BatchRun_Tab_Selector" on "Batch_Run" wizard
+ And wait load page
+ And click on "Filter_Button_Hub_Tab" element on "Batch_Run" wizard
+ Then verify "Title" element visibility in "Filter_Dropdown" on "Batch_Run" wizard
+ Then "Title" element in "Filter_Dropdown" on "Batch_Run" should contains "Filter by category" value
+ And click on "Batch_Run_Header" element on "Batch_Run" wizard
+ Then select "Other" option in "Category_Selector_Dropdown" filter dropdown on "Batch_Run" wizard
+ And wait load page
+ And click on "Batch_Run_Header" element on "Batch_Run" wizard
+ Then value in "labels" column with "attribute" in "Functions_Table" on "Batch_Run" wizard should contains "Other"
+ And click on "Filter_Button_Hub_Tab" element on "Batch_Run" wizard
+ When click on "Clear_Button" element in "Filter_Dropdown" on "Batch_Run" wizard
+ When type searchable fragment "test" into "Search_Input" on "Batch_Run" wizard
+ Then searchable case "sensitive" fragment "test" should be in every suggested option into "Search_Input" on "Batch_Run" wizard
+ Then value in "name" column with "text" in "Functions_Table" on "Batch_Run" wizard should contains "test"
+ When click on "Form_Header_Batch_Run" element on "Batch_Run" wizard
+ Then select "Functions" tab in "BatchRun_Tab_Selector" on "Batch_Run" wizard
+ Then select "churn-project-admin" option in "Project_Selector_Dropdown" filter dropdown on "Batch_Run" wizard
+ And click on row root with value "xgb-test" in "name" column in "Functions_Table" table on "Batch_Run" wizard
+ And wait load page
+ Then "Function_Title" element on "Batch_Run" should contains "xgb-test" value
+ Then verify "Back_Button" element visibility on "Batch_Run" wizard
+ Then verify "Next_Button" element visibility on "Batch_Run" wizard
+ Then verify "Step_1_Button" element on "Batch_Run" wizard is enabled
+ Then verify "Step_2_Button" element on "Batch_Run" wizard is enabled
+ Then verify "Step_3_Button" element on "Batch_Run" wizard is disabled
+ Then verify "Step_4_Button" element on "Batch_Run" wizard is disabled
+ Then verify "Step_5_Button" element on "Batch_Run" wizard is disabled
+ Then verify "Step_6_Button" element on "Batch_Run" wizard is disabled
+
+ Scenario: MLJW013 - Verify behaviour of Filter by category on Batch Run wizard - Function selection (Hub tab)
+ Given open url
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Jobs and workflows" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ And click on "Butch_Run_Button" element on "Jobs_Monitor_Tab" wizard
+ And wait load page
+ Then verify "BatchRun_Tab_Selector" on "Batch_Run" wizard should contains "Batch_Run"."Tab_List"
+ Then select "Hub" tab in "BatchRun_Tab_Selector" on "Batch_Run" wizard
+ And wait load page
+ And click on "Filter_Button_Hub_Tab" element on "Batch_Run" wizard
+ Then verify "Title" element visibility in "Filter_Dropdown" on "Batch_Run" wizard
+ Then "Title" element in "Filter_Dropdown" on "Batch_Run" should contains "Filter by category" value
+ Then verify "Clear_Button" element visibility in "Filter_Dropdown" on "Batch_Run" wizard
+ Then verify "Clear_Button" not input element in "Filter_Dropdown" on "Batch_Run" wizard is disabled
+ Then select "Other" option in "Category_Selector_Dropdown" filter dropdown on "Batch_Run" wizard
+ Then select "Data Preparation" option in "Category_Selector_Dropdown" filter dropdown on "Batch_Run" wizard
+ And wait load page
+ Then verify "Clear_Button" not input element in "Filter_Dropdown" on "Batch_Run" wizard is enabled
+ When click on "Clear_Button" element in "Filter_Dropdown" on "Batch_Run" wizard
+ And click on "Filter_Button_Hub_Tab" element on "Batch_Run" wizard
+ Then verify "Clear_Button" not input element in "Filter_Dropdown" on "Batch_Run" wizard is disabled
+
+ Scenario: MLJW042 - Check all mandatory components on Batch Run wizard - Run Details without Method
+ Given open url
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Jobs and workflows" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ And click on "Butch_Run_Button" element on "Jobs_Monitor_Tab" wizard
+ And wait load page
+ Then verify "Next_Button" element on "Batch_Run" wizard is disabled
+ And click on row root with value "test" in "name" column in "Functions_Table" table on "Batch_Run" wizard
+ Then "Function_Title" element on "Batch_Run" should contains "test" value
+ Then verify "Next_Button" element on "Batch_Run" wizard is enabled
+ And click on "Next_Button" element on "Batch_Run" wizard
+ Then verify "Step_1_Button" element on "Batch_Run" wizard is enabled
+ Then verify "Step_2_Button" element on "Batch_Run" wizard is enabled
+ Then verify "Step_3_Button" element on "Batch_Run" wizard is enabled
+ Then verify "Step_4_Button" element on "Batch_Run" wizard is disabled
+ Then verify "Step_5_Button" element on "Batch_Run" wizard is disabled
+ Then "Step_5_Button" element on "Batch_Run" should contains "Resources" value
+ Then verify "Step_6_Button" element on "Batch_Run" wizard is disabled
+ Then verify "Form_Header_Batch_Run" element visibility on "Batch_Run" wizard
+ Then "Form_Header_Batch_Run" element on "Batch_Run" should contains "Run Details" value
+ Then verify "Hyperparameter_Checkbox" element visibility on "Batch_Run" wizard
+ Then "Hyperparameter_Checkbox" element should be unchecked on "Batch_Run" wizard
+ Then check "Hyperparameter_Checkbox" element on "Batch_Run" wizard
+ Then "Hyperparameter_Checkbox" element should be checked on "Batch_Run" wizard
+ Then "Step_5_Button" element on "Batch_Run" should contains "Hyperparameter strategy" value
+ Then verify "Function_Name_Input_Batch_Run" element visibility on "Batch_Run" wizard
+ Then type value " " to "Function_Name_Input_Batch_Run" field on "Batch_Run" wizard
+ Then verify "Function_Name_Input_Batch_Run" on "Batch_Run" wizard should display options "Input_Hint"."Function_Name_Batch_Run_Hint"
+ Then type value "test" to "Function_Name_Input_Batch_Run" field on "Batch_Run" wizard
+ Then "Function_Title" element on "Batch_Run" should contains "test" value
+ Then verify "Version_Dropdown" element visibility on "Batch_Run" wizard
+ And select "$latest" option in "Version_Dropdown" dropdown on "Batch_Run" wizard
+ Then verify "Batch_Run_Labels_Table" element visibility on "Batch_Run" wizard
+ When add rows to "Batch_Run_Labels_Table" table on "Batch_Run" wizard
+ | key_input | value_input |
+ | key1 | value1 |
+ | key2 | value2 |
+ | key3 | value3 |
+ | key4 | value4 |
+ | key5 | value5 |
+ Then verify values in "Batch_Run_Labels_Table" table on "Batch_Run" wizard with attribute
+ | key_verify | value_verify |
+ | key1 | value1 |
+ | key2 | value2 |
+ | key3 | value3 |
+ | key4 | value4 |
+ | key5 | value5 |
+ When click on "remove_btn" in "Batch_Run_Labels_Table" table on "Batch_Run" wizard with attribute
+ | key_verify |
+ | key1 |
+ | key3 |
+ | key4 |
+ | key5 |
+ Then verify values in "Batch_Run_Labels_Table" table on "Batch_Run" wizard with attribute
+ | key_verify | value_verify |
+ | key2 | value2 |
+
+ Scenario: MLJW044 - Check "Max Iterations", "Max errors" inputs field availability according to the strategy type in Hyperparameter strategy
+ Given open url
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Jobs and workflows" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ And click on "Butch_Run_Button" element on "Jobs_Monitor_Tab" wizard
+ And wait load page
+ And click on row root with value "test" in "name" column in "Functions_Table" table on "Batch_Run" wizard
+ Then "Function_Title" element on "Batch_Run" should contains "test" value
+ And click on "Next_Button" element on "Batch_Run" wizard
+ Then check "Hyperparameter_Checkbox" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ Then "Form_Header_Batch_Run" element on "Batch_Run" should contains "Hyperparameter strategy" value
+ Then verify "Strategy_Dropdown" element in "Hyperparameter_Strategy_Accordion" on "Batch_Run_Edit" wizard should contains "Dropdown_Options"."Hyperparameter_Strategy_Options"
+ Then verify "Strategy_Dropdown" dropdown in "Hyperparameter_Strategy_Accordion" on "Batch_Run_Edit" wizard selected option value "List"
+ Then verify "Max_Iterations" element in "Hyperparameter_Strategy_Accordion" on "Batch_Run_Edit" wizard is disabled by class name
+ Then verify "Max_Errors" element in "Hyperparameter_Strategy_Accordion" on "Batch_Run_Edit" wizard is disabled by class name
+ Then select "Grid" option in "Strategy_Dropdown" dropdown on "Hyperparameter_Strategy_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "Strategy_Dropdown" dropdown in "Hyperparameter_Strategy_Accordion" on "Batch_Run_Edit" wizard selected option value "Grid"
+ Then verify "Max_Iterations" element in "Hyperparameter_Strategy_Accordion" on "Batch_Run_Edit" wizard is disabled by class name
+ Then verify "Max_Errors" element in "Hyperparameter_Strategy_Accordion" on "Batch_Run_Edit" wizard is disabled by class name
+ Then select "Random" option in "Strategy_Dropdown" dropdown on "Hyperparameter_Strategy_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "Strategy_Dropdown" dropdown in "Hyperparameter_Strategy_Accordion" on "Batch_Run_Edit" wizard selected option value "Random"
+ Then verify "Max_Iterations" element in "Hyperparameter_Strategy_Accordion" on "Batch_Run_Edit" wizard is enabled by class name
+ Then verify "Max_Errors" element in "Hyperparameter_Strategy_Accordion" on "Batch_Run_Edit" wizard is enabled by class name
+
+ Scenario: MLJW051 - Check all mandatory components on Batch Run wizard - Run Details with Method
+ Given open url
+ And click on row root with value "churn-project-admin" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Jobs and workflows" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ And click on "Butch_Run_Button" element on "Jobs_Monitor_Tab" wizard
+ And wait load page
+ Then verify "Next_Button" element on "Batch_Run" wizard is disabled
+ And click on row root with value "clean-data" in "name" column in "Functions_Table" table on "Batch_Run" wizard
+ Then "Function_Title" element on "Batch_Run" should contains "clean-data" value
+ Then verify "Next_Button" element on "Batch_Run" wizard is enabled
+ And click on "Next_Button" element on "Batch_Run" wizard
+ Then "Function_Title" element on "Batch_Run" should contains "clean-data" value
+ Then verify "Name_Input_Batch_Run" on "Batch_Run" wizard should contains "clean-data" value
+ Then verify "Form_Header_Batch_Run" element visibility on "Batch_Run" wizard
+ Then "Form_Header_Batch_Run" element on "Batch_Run" should contains "Run Details" value
+ Then verify "Hyperparameter_Checkbox" element visibility on "Batch_Run" wizard
+ Then "Hyperparameter_Checkbox" element should be unchecked on "Batch_Run" wizard
+ Then verify "Function_Name_Input_Batch_Run" element visibility on "Batch_Run" wizard
+ Then type value "/" to "Function_Name_Input_Batch_Run" field on "Batch_Run" wizard
+ Then verify "Function_Name_Input_Batch_Run" on "Batch_Run" wizard should display options "Input_Hint"."Function_Name_Batch_Run_Hint"
+ Then type value "test" to "Function_Name_Input_Batch_Run" field on "Batch_Run" wizard
+ Then "Function_Title" element on "Batch_Run" should contains "test" value
+ Then verify "Version_Dropdown" element visibility on "Batch_Run" wizard
+ And select "$latest" option in "Version_Dropdown" dropdown on "Batch_Run" wizard
+ Then verify "Method_Dropdown" element visibility on "Batch_Run" wizard
+ And select "data_clean" option in "Method_Dropdown" dropdown on "Batch_Run" wizard
+ Then verify "Batch_Run_Labels_Table" element visibility on "Batch_Run" wizard
+ And click on "Add_Label_Button" element on "Batch_Run" wizard
+ Then type value "/" to "Run_Details_Labels_Key" field on "Batch_Run" wizard
+ Then verify labels warning should display options "Input_Hint"."Labels_Warning_Key"
+ Then type value "/" to "Run_Details_Labels_Value" field on "Batch_Run" wizard without inputgroup
+ Then verify labels warning should display options "Input_Hint"."Labels_Warning_Value"
+ When click on "Form_Header_Batch_Run" element on "Batch_Run" wizard
+ And click on "Close_Label_Button" element on "Batch_Run" wizard
+ When add rows to "Batch_Run_Labels_Table" table on "Batch_Run" wizard
+ | key_input | value_input |
+ | key1 | value1 |
+ | key2 | value2 |
+ | key3 | value3 |
+ Then verify values in "Batch_Run_Labels_Table" table on "Batch_Run" wizard with attribute
+ | key_verify | value_verify |
+ | key1 | value1 |
+ | key2 | value2 |
+ | key3 | value3 |
+
+ Scenario: MLJW053 - Check changing "Method" after "Hyperparameter" check in Run Details section of Batch Run
+ Given open url
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Jobs and workflows" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ And click on "Butch_Run_Button" element on "Jobs_Monitor_Tab" wizard
+ And wait load page
+ Then verify "Batch_Run_Header" element visibility on "Batch_Run" wizard
+ Then select "Hub" tab in "BatchRun_Tab_Selector" on "Batch_Run" wizard
+ And wait load page
+ And click on row root with value "feature-selection" in "name" column in "Functions_Table" table on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ Then verify "Method_Dropdown" element visibility on "Batch_Run" wizard
+ And select "plot_stat" option in "Method_Dropdown" dropdown on "Batch_Run" wizard
+ Then "Method_Dropdown_Option" element on "Batch_Run" should contains "plot_stat" value
+ And select "show_values_on_bars" option in "Method_Dropdown" dropdown on "Batch_Run" wizard
+ Then check "Hyperparameter_Checkbox" element on "Batch_Run" wizard
+ And select "plot_stat" option in "Method_Dropdown" dropdown on "Batch_Run" wizard
+ Then "Method_Dropdown_Option" element on "Batch_Run" should contains "plot_stat" value
+
+ Scenario: MLJW054 - Check "Image name" field in Run Details section of Batch Run
+ Given open url
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Jobs and workflows" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ And click on "Butch_Run_Button" element on "Jobs_Monitor_Tab" wizard
+ And wait load page
+ Then verify "Batch_Run_Header" element visibility on "Batch_Run" wizard
+ Then select "Hub" tab in "BatchRun_Tab_Selector" on "Batch_Run" wizard
+ And wait load page
+ And click on row root with value "feature-selection" in "name" column in "Functions_Table" table on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ Then verify "Image_Name_Input_Run_Details" element visibility on "Batch_Run" wizard
+ Then type value "" to "Image_Name_Input_Run_Details" field on "Batch_Run" wizard
+ Then verify "Image_Name_Input_Run_Details" on "Batch_Run" wizard should display warning "Input_Hint"."Input_Field_Require"
+ Then "Image_Name_Text_Run_Details" component on "Batch_Run" should contains "Batch_Run"."Image_Name_Text"
+
+ Scenario: MLJW039 - Check all mandatory components on Batch Run wizard - Data Inputs
+ Given open url
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Jobs and workflows" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ And click on "Butch_Run_Button" element on "Jobs_Monitor_Tab" wizard
+ And wait load page
+ Then verify "Next_Button" element on "Batch_Run" wizard is disabled
+ And click on row root with value "test" in "name" column in "Functions_Table" table on "Batch_Run" wizard
+ Then "Function_Title" element on "Batch_Run" should contains "test" value
+ Then verify "Next_Button" element on "Batch_Run" wizard is enabled
+ And click on "Next_Button" element on "Batch_Run" wizard
+ Then verify "Name_Input_Batch_Run" on "Batch_Run" wizard should contains "test" value
+ And click on "Next_Button" element on "Batch_Run" wizard
+ Then verify "Step_1_Button" element on "Batch_Run" wizard is enabled
+ Then verify "Step_2_Button" element on "Batch_Run" wizard is enabled
+ Then verify "Step_3_Button" element on "Batch_Run" wizard is enabled
+ Then verify "Step_4_Button" element on "Batch_Run" wizard is enabled
+ Then verify "Step_5_Button" element on "Batch_Run" wizard is disabled
+ Then verify "Step_6_Button" element on "Batch_Run" wizard is disabled
+ Then verify "Form_Header_Batch_Run" element visibility on "Batch_Run" wizard
+ Then "Form_Header_Batch_Run" element on "Batch_Run" should contains "Data Inputs" value
+ Then verify "Data_Inputs_Headers" on "Batch_Run" wizard should contains "Batch_Run"."Data_Inputs_Table_Header"
+ When add data to "Batch_Run_Data_Inputs_Table" table on "Batch_Run" wizard
+ | name_input | path_dropdown | path_input |
+ | name1 | V3IO | container-name/file |
+ | name2 | V3IO | container-name/file |
+ | name3 | V3IO | container-name/file |
+ Then verify data in "Batch_Run_Data_Inputs_Table" table on "Batch_Run" wizard
+ | name_verify | path_verify |
+ | name1 | v3io:///container-name/file |
+ | name2 | v3io:///container-name/file |
+ | name3 | v3io:///container-name/file |
+ When click on "delete_btn" with data in "Batch_Run_Data_Inputs_Table" table on "Batch_Run" wizard with offset "false"
+ | name_verify |
+ | name1 |
+ | name3 |
+ Then verify data in "Batch_Run_Data_Inputs_Table" table on "Batch_Run" wizard
+ | name_verify | path_verify |
+ | name2 | v3io:///container-name/file |
+ Then edit 1 row in "Batch_Run_Data_Inputs_Table" key-value table on "Batch_Run" wizard
+ | name_input | path_input |
+ | edited | edited |
+ Then verify data in "Batch_Run_Data_Inputs_Table" table on "Batch_Run" wizard
+ | name_verify | path_verify |
+ | name2edited | v3io:///container-name/fileedited |
+
+ Scenario: MLJW038 - Check all mandatory components on Batch Run wizard - Parameters
+ Given open url
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Jobs and workflows" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ And click on "Butch_Run_Button" element on "Jobs_Monitor_Tab" wizard
+ And wait load page
+ Then verify "Next_Button" element on "Batch_Run" wizard is disabled
+ And click on row root with value "test" in "name" column in "Functions_Table" table on "Batch_Run" wizard
+ Then "Function_Title" element on "Batch_Run" should contains "test" value
+ Then verify "Next_Button" element on "Batch_Run" wizard is enabled
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ Then "Function_Title" element on "Batch_Run" should contains "test" value
+ Then verify "Step_1_Button" element on "Batch_Run" wizard is enabled
+ Then verify "Step_2_Button" element on "Batch_Run" wizard is enabled
+ Then verify "Step_3_Button" element on "Batch_Run" wizard is enabled
+ Then verify "Step_4_Button" element on "Batch_Run" wizard is enabled
+ Then verify "Step_5_Button" element on "Batch_Run" wizard is enabled
+ Then verify "Step_6_Button" element on "Batch_Run" wizard is disabled
+ Then "Batch_Run_Header" element on "Batch_Run" should contains "Batch Run" value
+ Then verify "Form_Header_Batch_Run" element visibility on "Batch_Run" wizard
+ Then "Form_Header_Batch_Run" element on "Batch_Run" should contains "Parameters" value
+ Then verify "Data_Inputs_Headers" on "Batch_Run" wizard should contains "Batch_Run"."Parameters_Table_Header"
+ And click on "Add_Custom_Parameter_Button" element on "Batch_Run" wizard
+ Then verify "Checkbox_Parameters" element visibility on "Batch_Run" wizard
+ Then "Checkbox_Parameters" element should be checked on "Batch_Run" wizard
+ Then uncheck "Checkbox_Parameters" element on "Batch_Run" wizard
+ Then "Checkbox_Parameters" element should be unchecked on "Batch_Run" wizard
+ And hover "Delete_Button_Parameters" component on "Batch_Run" wizard
+ And click on "Delete_Button_Parameters" element on "Batch_Run" wizard
+ When add data to "Batch_Run_Parameters_Table" table on "Batch_Run" wizard
+ | name_input | type_dropdown | value_input |
+ | name1 | str | value1 |
+ | name2 | int | 1 |
+ | name3 | float | 0.5 |
+ Then verify data in "Batch_Run_Parameters_Table" table on "Batch_Run" wizard
+ | name_verify | type_dropdown_verify | value_verify |
+ | name1 | str | value1 |
+ | name2 | int | 1 |
+ | name3 | float | 0.5 |
+ When click on "delete_btn" with data in "Batch_Run_Parameters_Table" table on "Batch_Run" wizard with offset "false"
+ | name_verify |
+ | name1 |
+ | name3 |
+ Then verify data in "Batch_Run_Parameters_Table" table on "Batch_Run" wizard
+ | name_verify | type_dropdown_verify | value_verify |
+ | name2 | int | 1 |
+ Then edit 1 row in "Batch_Run_Parameters_Table" key-value table on "Batch_Run" wizard
+ | name_input | value_input |
+ | edited | 234 |
+ Then verify data in "Batch_Run_Parameters_Table" table on "Batch_Run" wizard
+ | name_verify | type_dropdown_verify | value_verify |
+ | name2edited | int | 1234 |
+
+ @inProgress
+ Scenario: MLJW037 - Check all mandatory components on Batch Run wizard - Step 5 (Resources)
+ Given open url
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Jobs and workflows" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ And click on "Butch_Run_Button" element on "Jobs_Monitor_Tab" wizard
+ And wait load page
+ Then verify "Next_Button" element on "Batch_Run" wizard is disabled
+ And click on row root with value "test" in "name" column in "Functions_Table" table on "Batch_Run" wizard
+ Then "Function_Title" element on "Batch_Run" should contains "test" value
+ Then verify "Next_Button" element on "Batch_Run" wizard is enabled
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ Then "Function_Title" element on "Batch_Run" should contains "test" value
+ Then verify "Step_1_Button" element on "Batch_Run" wizard is enabled
+ Then verify "Step_2_Button" element on "Batch_Run" wizard is enabled
+ Then verify "Step_3_Button" element on "Batch_Run" wizard is enabled
+ Then verify "Step_4_Button" element on "Batch_Run" wizard is enabled
+ Then verify "Step_5_Button" element on "Batch_Run" wizard is enabled
+ Then verify "Step_6_Button" element on "Batch_Run" wizard is enabled
+ Then "Batch_Run_Header" element on "Batch_Run" should contains "Batch Run" value
+ Then verify "Form_Header_Batch_Run" element visibility on "Batch_Run" wizard
+ Then "Form_Header_Batch_Run" element on "Batch_Run" should contains "Resources" value
+ Then verify "Pods_Priority_Dropdown" dropdown in "Resources_Accordion" on "Batch_Run_Edit" wizard selected option value "Medium"
+ Then select "Low" option in "Pods_Priority_Dropdown" dropdown on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "Pods_Priority_Dropdown" dropdown in "Resources_Accordion" on "Batch_Run_Edit" wizard selected option value "Low"
+ Then select "High" option in "Pods_Priority_Dropdown" dropdown on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "Pods_Priority_Dropdown" dropdown in "Resources_Accordion" on "Batch_Run_Edit" wizard selected option value "High"
+ Then verify "Node_Selection_Subheader" element visibility in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then "Node_Selection_Subheader" element in "Resources_Accordion" on "Batch_Run_Edit" should contains "Node selection" value
+ Then verify "Resources_Node_Selector_Table" element visibility in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ When add data rows to "Resources_Node_Selector_Table" key-value table in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ | key_input | value_input |
+ | key1 | value1 |
+ | key2 | value2 |
+ | key3 | value3 |
+ | key4 | value4 |
+ Then verify data values in "Resources_Node_Selector_Table" table in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ | key | value |
+ | key1 | value1 |
+ | key2 | value2 |
+ | key3 | value3 |
+ | key4 | value4 |
+ When click on "delete_btn" in "Resources_Node_Selector_Table" table in "Resources_Accordion" on "Batch_Run_Edit" wizard with offset "false"
+ | key |
+ | key3 |
+ | key1 |
+ Then verify data values in "Resources_Node_Selector_Table" table in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ | key | value |
+ | key2 | value2 |
+ | key4 | value4 |
+ Then edit 2 row in "Resources_Node_Selector_Table" key-value table in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ | key_input | value_input |
+ | edited | edited |
+ Then verify data values in "Resources_Node_Selector_Table" table in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ | key | value |
+ | key2edited | value2edited |
+ | key4 | value4 |
+ Then verify "Memory_Request_Dropdown" element visibility in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "Memory_Request_Dropdown" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should contains "Dropdown_Options"."Memory_Unit_Options"
+ Then verify "Memory_Limit_Dropdown" element visibility in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "Memory_Limit_Dropdown" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should contains "Dropdown_Options"."Memory_Unit_Options"
+ Then verify "Memory_Request_Number_Input" element visibility in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then type value "0" to "Memory_Limit_Number_Input" field on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "Memory_Limit_Number_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display warning "Input_Hint"."Minimum_Value_Warning"
+ Then type value "1" to "Memory_Limit_Number_Input" field on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then type value "1025" to "Memory_Request_Number_Input" field on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "Memory_Limit_Number_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display warning "Input_Hint"."Limit_Number_Warning"
+ Then verify "Memory_Request_Number_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display warning "Input_Hint"."Request_Number_Warning"
+ Then type value "2" to "Memory_Limit_Number_Input" field on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then select "KB" option in "Memory_Limit_Dropdown" dropdown on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "Memory_Limit_Number_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display warning "Input_Hint"."Limit_Number_Warning"
+ Then verify "Memory_Request_Number_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display warning "Input_Hint"."Request_Number_Warning"
+ Then select "KB" option in "Memory_Request_Dropdown" dropdown on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then type value "" to "Memory_Limit_Number_Input" field on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "Memory_Limit_Number_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display warning "Input_Hint"."Input_Field_Require"
+ Then type value "2" to "Memory_Limit_Number_Input" field on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then select "GB" option in "Memory_Request_Dropdown" dropdown on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "Memory_Limit_Number_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display warning "Input_Hint"."Limit_Number_Warning"
+ Then verify "Memory_Request_Number_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display warning "Input_Hint"."Request_Number_Warning"
+ Then verify "CPU_Request_Dropdown" element visibility in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "CPU_Request_Dropdown" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should contains "Dropdown_Options"."CPU_Unit_Options"
+ Then verify "CPU_Limit_Dropdown" element visibility in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "CPU_Limit_Dropdown" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should contains "Dropdown_Options"."CPU_Unit_Options"
+ Then select "millicpu" option in "CPU_Limit_Dropdown" dropdown on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then select "millicpu" option in "CPU_Request_Dropdown" dropdown on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then type value "0" to "CPU_Limit_Number_Input" field on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "CPU_Limit_Number_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display warning "Input_Hint"."Limit_Number_Warning"
+ Then type value "1" to "CPU_Limit_Number_Input" field on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then type value "1025" to "CPU_Request_Number_Input" field on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "CPU_Limit_Number_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display warning "Input_Hint"."Limit_Number_Warning"
+ Then verify "CPU_Request_Number_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display warning "Input_Hint"."Request_Number_Warning"
+ Then type value "0" to "GPU_Limit_Number_Input" field on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "GPU_Limit_Number_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display warning "Input_Hint"."GPU_Minimum_Value_Warning"
+ Then verify "Memory_Request_Dropdown" element visibility in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "Memory_Request_Dropdown" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should contains "Dropdown_Options"."Memory_Unit_Options"
+ Then verify "Memory_Request_Number_Input" element visibility in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then type value "1" to "Memory_Request_Number_Input" field on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then increase value on 15 points in "Memory_Request_Number_Input" field on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then decrease value on 15 points in "Memory_Request_Number_Input" field on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "Memory_Limit_Dropdown" element visibility in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "Memory_Limit_Dropdown" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should contains "Dropdown_Options"."Memory_Unit_Options"
+ Then verify "Memory_Limit_Number_Input" element visibility in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then type value "2" to "Memory_Limit_Number_Input" field on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then increase value on 15 points in "Memory_Limit_Number_Input" field on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then decrease value on 15 points in "Memory_Limit_Number_Input" field on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "CPU_Request_Dropdown" element visibility in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "CPU_Request_Dropdown" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should contains "Dropdown_Options"."CPU_Unit_Options"
+ Then verify "CPU_Request_Number_Input" element visibility in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then type value "3" to "CPU_Request_Number_Input" field on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then increase value on 15 points in "CPU_Request_Number_Input" field with "millicpu" on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then decrease value on 15 points in "CPU_Request_Number_Input" field with "millicpu" on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then select "cpu" option in "CPU_Request_Dropdown" dropdown on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "CPU_Request_Number_Input" input should contains "0.003" value in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then increase value on 8 points in "CPU_Request_Number_Input" field with "cpu" on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then decrease value on 8 points in "CPU_Request_Number_Input" field with "cpu" on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "CPU_Limit_Dropdown" element visibility in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "CPU_Limit_Dropdown" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should contains "Dropdown_Options"."CPU_Unit_Options"
+ Then verify "CPU_Limit_Number_Input" element visibility in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then type value "4" to "CPU_Limit_Number_Input" field on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then increase value on 15 points in "CPU_Limit_Number_Input" field with "millicpu" on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then decrease value on 15 points in "CPU_Limit_Number_Input" field with "millicpu" on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then select "cpu" option in "CPU_Limit_Dropdown" dropdown on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "CPU_Limit_Number_Input" input should contains "0.004" value in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then increase value on 8 points in "CPU_Request_Number_Input" field with "cpu" on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then decrease value on 8 points in "CPU_Request_Number_Input" field with "cpu" on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "GPU_Limit_Number_Input" element visibility in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then type value "5" to "GPU_Limit_Number_Input" field on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then increase value on 15 points in "GPU_Limit_Number_Input" field on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then decrease value on 15 points in "GPU_Limit_Number_Input" field on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "Volumes_Subheader" element visibility in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "Volumes_Subheader" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display hint "Label_Hint"."New_Job_Volumes"
+
+ Scenario: MLJW043 - Check Batch-Run running after edit GPU limit in Resources section
+ Given open url
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Jobs and workflows" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ And click on "Butch_Run_Button" element on "Jobs_Monitor_Tab" wizard
+ And wait load page
+ And click on row root with value "test" in "name" column in "Functions_Table" table on "Batch_Run" wizard
+ Then "Function_Title" element on "Batch_Run" should contains "test" value
+ Then verify "Next_Button" element on "Batch_Run" wizard is enabled
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ Then "Form_Header_Batch_Run" element on "Batch_Run" should contains "Resources" value
+ Then verify "GPU_Limit_Number_Input" element visibility in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then type value "5" to "GPU_Limit_Number_Input" field on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Run_Button" element on "Batch_Run" wizard
+ And wait load page
+ Then value in "name" column with "text" in "Jobs_Monitor_Table" on "Jobs_Monitor_Tab" wizard should contains "test"
+
+ Scenario: MLJW025 - Check Minimum CPU value on Batch Run wizard - Resources
+ Given open url
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Jobs and workflows" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ And click on "Butch_Run_Button" element on "Jobs_Monitor_Tab" wizard
+ And wait load page
+ Then verify "Next_Button" element on "Batch_Run" wizard is disabled
+ And click on row root with value "test" in "name" column in "Functions_Table" table on "Batch_Run" wizard
+ Then "Function_Title" element on "Batch_Run" should contains "test" value
+ Then verify "Next_Button" element on "Batch_Run" wizard is enabled
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ Then "Batch_Run_Header" element on "Batch_Run" should contains "Batch Run" value
+ Then "Form_Header_Batch_Run" element on "Batch_Run" should contains "Resources" value
+ Then verify "CPU_Request_Dropdown" element visibility in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "CPU_Request_Dropdown" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should contains "Dropdown_Options"."CPU_Unit_Options"
+ Then verify "CPU_Limit_Dropdown" element visibility in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "CPU_Limit_Dropdown" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should contains "Dropdown_Options"."CPU_Unit_Options"
+ Then select "millicpu" option in "CPU_Limit_Dropdown" dropdown on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then select "millicpu" option in "CPU_Request_Dropdown" dropdown on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then type value "0" to "CPU_Limit_Number_Input" field on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "CPU_Limit_Number_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display warning "Input_Hint"."Minimum_Value_Warning"
+ Then type value "0" to "CPU_Request_Number_Input" field on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "CPU_Request_Number_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display warning "Input_Hint"."Minimum_Value_Warning"
+ Then type value "-1" to "CPU_Limit_Number_Input" field on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "CPU_Limit_Number_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display warning "Input_Hint"."Minimum_Value_Warning"
+ Then type value "-1" to "CPU_Request_Number_Input" field on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "CPU_Request_Number_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display warning "Input_Hint"."Minimum_Value_Warning"
+ Then type value "2" to "CPU_Request_Number_Input" field on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then decrease value on 3 points in "CPU_Request_Number_Input" field with "millicpu" on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "CPU_Request_Number_Input" input should contains "1" value in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then type value "2" to "CPU_Limit_Number_Input" field on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then decrease value on 3 points in "CPU_Limit_Number_Input" field with "millicpu" on "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "CPU_Limit_Number_Input" input should contains "1" value in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ When add new volume rows to "Volume_Paths_Table" table in "Resources_Accordion" on "Batch_Run_Edit" wizard using nontable inputs
+ | Volume_Paths_Table_Type_Dropdown | Volume_Paths_Table_Volume_Name_Input | Volume_Paths_Table_Path_Input | Volume_Paths_Table_Container_Input | Volume_Paths_Table_Access_Key_Input | Volume_Paths_Table_Resource_Path_Input | Add_New_Row_Button | Delete_New_Row_Button |
+ | V3IO | Volume_Name_1 | /path/to/happines1 | Container_Input_1 | Access_Key_1 | /resource/path_1 | yes | |
+ | V3IO | Volume_Name_2 | /path/to/happines2 | Container_Input_2 | Access_Key_2 | /resource/path_2 | yes | |
+
+ Scenario: MLJW026 - Check tip and warning messages in Volumes section on Batch Run wizard - Resources
+ Given open url
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Jobs and workflows" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ And click on "Butch_Run_Button" element on "Jobs_Monitor_Tab" wizard
+ And wait load page
+ Then verify "Next_Button" element on "Batch_Run" wizard is disabled
+ And click on row root with value "test" in "name" column in "Functions_Table" table on "Batch_Run" wizard
+ Then "Function_Title" element on "Batch_Run" should contains "test" value
+ Then verify "Next_Button" element on "Batch_Run" wizard is enabled
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ Then "Batch_Run_Header" element on "Batch_Run" should contains "Batch Run" value
+ Then "Form_Header_Batch_Run" element on "Batch_Run" should contains "Resources" value
+ Then verify "Volumes_Subheader" element visibility in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "Volumes_Subheader" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display hint "Label_Hint"."New_Job_Volumes"
+ When add new volume rows to "Volume_Paths_Table" table in "Resources_Accordion" on "Batch_Run_Edit" wizard using nontable inputs
+ | Volume_Paths_Table_Type_Dropdown | Volume_Paths_Table_Volume_Name_Input | Volume_Paths_Table_Path_Input | Volume_Paths_Table_Container_Input | Volume_Paths_Table_Access_Key_Input | Volume_Paths_Table_Resource_Path_Input | Add_New_Row_Button |
+ | V3IO | | | | | | yes |
+ Then verify "Volume_Paths_Table_Volume_Name_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display warning "Input_Hint"."Input_Field_Require"
+ Then verify "Volume_Paths_Table_Path_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display warning "Input_Hint"."Input_Field_Require"
+ Then verify "Volume_Paths_Table_Access_Key_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display warning "Input_Hint"."Input_Field_Require"
+ Then verify "Volume_Paths_Table_Path_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display hint "Input_Hint"."Mount_Path_Hint"
+ Then verify "Volume_Paths_Table_Container_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display hint "Input_Hint"."Data_Container_Hint"
+ Then verify "Volume_Paths_Table_Access_Key_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display hint "Input_Hint"."DataAccess_Key_Hint"
+ Then verify "Volume_Paths_Table_Resource_Path_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display hint "Input_Hint"."Relative_Directory_Path_Hint"
+ When click on "Delete_New_Row_Button" element in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ When add new volume rows to "Volume_Paths_Table" table in "Resources_Accordion" on "Batch_Run_Edit" wizard using nontable inputs
+ | Volume_Paths_Table_Type_Dropdown | Volume_Paths_Table_Volume_Name_Input | Volume_Paths_Table_Path_Input | Volume_Paths_Table_Config_Map_Input | Add_New_Row_Button |
+ | Config Map | | | | yes |
+ Then verify "Volume_Paths_Table_Volume_Name_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display warning "Input_Hint"."Input_Field_Require"
+ Then verify "Volume_Paths_Table_Path_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display warning "Input_Hint"."Input_Field_Require"
+ Then verify "Volume_Paths_Table_Config_Map_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display warning "Input_Hint"."Input_Field_Require"
+ Then verify "Volume_Paths_Table_Path_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display hint "Input_Hint"."Mount_Path_Hint"
+ When click on "Delete_New_Row_Button" element in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ When add new volume rows to "Volume_Paths_Table" table in "Resources_Accordion" on "Batch_Run_Edit" wizard using nontable inputs
+ | Volume_Paths_Table_Type_Dropdown | Volume_Paths_Table_Volume_Name_Input | Volume_Paths_Table_Path_Input | Volume_Paths_Table_Secret_Name_Input | Add_New_Row_Button |
+ | Secret | | | | yes |
+ Then verify "Volume_Paths_Table_Volume_Name_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display warning "Input_Hint"."Input_Field_Require"
+ Then verify "Volume_Paths_Table_Path_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display warning "Input_Hint"."Input_Field_Require"
+ Then verify "Volume_Paths_Table_Secret_Name_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display warning "Input_Hint"."Input_Field_Require"
+ Then verify "Volume_Paths_Table_Path_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display hint "Input_Hint"."Mount_Path_Hint"
+ When click on "Delete_New_Row_Button" element in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ When add new volume rows to "Volume_Paths_Table" table in "Resources_Accordion" on "Batch_Run_Edit" wizard using nontable inputs
+ | Volume_Paths_Table_Type_Dropdown | Volume_Paths_Table_Volume_Name_Input | Volume_Paths_Table_Path_Input | Volume_Paths_Table_Claime_Name_Input | Add_New_Row_Button |
+ | PVC | | | | yes |
+ Then verify "Volume_Paths_Table_Volume_Name_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display warning "Input_Hint"."Input_Field_Require"
+ Then verify "Volume_Paths_Table_Path_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display warning "Input_Hint"."Input_Field_Require"
+ Then verify "Volume_Paths_Table_Claime_Name_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display warning "Input_Hint"."Input_Field_Require"
+ Then verify "Volume_Paths_Table_Path_Input" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display hint "Input_Hint"."Mount_Path_Hint"
+ When click on "Delete_New_Row_Button" element in "Resources_Accordion" on "Batch_Run_Edit" wizard
+
+ Scenario: MLJW031 - Check mandatory of Container and Resource Path fields for V3IO volume - Batch Run - Resources
+ Given open url
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Jobs and workflows" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ And click on "Butch_Run_Button" element on "Jobs_Monitor_Tab" wizard
+ And wait load page
+ Then verify "Next_Button" element on "Batch_Run" wizard is disabled
+ And click on row root with value "test" in "name" column in "Functions_Table" table on "Batch_Run" wizard
+ Then "Function_Title" element on "Batch_Run" should contains "test" value
+ Then verify "Next_Button" element on "Batch_Run" wizard is enabled
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ Then "Batch_Run_Header" element on "Batch_Run" should contains "Batch Run" value
+ Then "Form_Header_Batch_Run" element on "Batch_Run" should contains "Resources" value
+ Then verify "Volumes_Subheader" element visibility in "Resources_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "Volumes_Subheader" element in "Resources_Accordion" on "Batch_Run_Edit" wizard should display hint "Label_Hint"."New_Job_Volumes"
+ When add new volume rows to "Volume_Paths_Table" table in "Resources_Accordion" on "Batch_Run_Edit" wizard using nontable inputs
+ | Volume_Paths_Table_Type_Dropdown | Volume_Paths_Table_Volume_Name_Input | Volume_Paths_Table_Path_Input | Volume_Paths_Table_Container_Input | Volume_Paths_Table_Access_Key_Input | Volume_Paths_Table_Resource_Path_Input | Add_New_Row_Button |
+ | V3IO | Volume_Name_1 | /path/to/happines1 | | Access_Key_1 | | yes |
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Run_Button" element on "Batch_Run" wizard
+ And wait load page
+ Then value in "name" column with "text" in "Jobs_Monitor_Table" on "Jobs_Monitor_Tab" wizard should contains "test"
+
+ Scenario: MLJW033 - Check autocomplete without tags MLRun Store path for datasets, artifacts, models, feature vectors - Batch Run - Data input
+ Given open url
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Jobs and workflows" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ And click on "Butch_Run_Button" element on "Jobs_Monitor_Tab" wizard
+ And wait load page
+ Then verify "Next_Button" element on "Batch_Run" wizard is disabled
+ And click on row root with value "test" in "name" column in "Functions_Table" table on "Batch_Run" wizard
+ Then "Function_Title" element on "Batch_Run" should contains "test" value
+ Then verify "Next_Button" element on "Batch_Run" wizard is enabled
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ Then "Batch_Run_Header" element on "Batch_Run" should contains "Batch Run" value
+ Then "Form_Header_Batch_Run" element on "Batch_Run" should contains "Data Inputs" value
+ When add data to "Batch_Run_Data_Inputs_Table" table on "Batch_Run" wizard with combobox
+ | name_input | path_dropdown | path_dropdown_autocomplete_artifacts | path_dropdown_autocomplete_project | path_dropdown_autocomplete_item |
+ | Artifacts | MLRun store | Artifacts | default | content |
+ | Datasets | MLRun store | Datasets | default | test_new_structure |
+ | Models | MLRun store | Models | default | model |
+ | Feature vectors | MLRun store | Feature vectors | default | test-i |
+ Then verify data in "Batch_Run_Data_Inputs_Table" table on "Batch_Run" wizard
+ | name_verify | path_verify |
+ | Artifacts | store://artifacts/default/content |
+ | Datasets | store://datasets/default/test_new_structure |
+ | Models | store://models/default/model |
+ | Feature vectors | store://feature-vectors/default/test-i |
+
+ Scenario: MLJW034 - Check setting schedule for a job - Batch Run - Schedule for later
+ Given open url
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Jobs and workflows" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ And click on "Butch_Run_Button" element on "Jobs_Monitor_Tab" wizard
+ And wait load page
+ Then verify "Next_Button" element on "Batch_Run" wizard is disabled
+ And click on row root with value "test" in "name" column in "Functions_Table" table on "Batch_Run" wizard
+ Then "Function_Title" element on "Batch_Run" should contains "test" value
+ Then verify "Next_Button" element on "Batch_Run" wizard is enabled
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ Then "Batch_Run_Header" element on "Batch_Run" should contains "Batch Run" value
+ Then "Form_Header_Batch_Run" element on "Batch_Run" should contains "Advanced" value
+ And click on "Schedule_for_later_Button" element on "Batch_Run" wizard
+ Then verify "Time_unit_Dropdown" element visibility in "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then verify "Time_unit_Dropdown" element in "Schedule_For_Later" on "Batch_Run_Edit" wizard should contains "Dropdown_Options"."Time_Unit_Options"
+ Then select "Weekly" option in "Time_unit_Dropdown" dropdown on "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then verify "Schedule_Button" not input element in "Schedule_For_Later" on "Batch_Run_Edit" wizard is enabled
+ Then verify "Schedule_item_Sunday" not input element in "Schedule_For_Later" on "Batch_Run_Edit" wizard is NOT active
+ Then verify "Schedule_item_Monday" not input element in "Schedule_For_Later" on "Batch_Run_Edit" wizard is active
+ When click on "Schedule_item_Monday" element in "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then verify "Schedule_item_Monday" not input element in "Schedule_For_Later" on "Batch_Run_Edit" wizard is NOT active
+ When click on "Schedule_item_Tuesday" element in "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ When click on "Schedule_item_Wednesday" element in "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ When click on "Schedule_item_Thursday" element in "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ When click on "Schedule_item_Friday" element in "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then "Error_Message" component in "Schedule_For_Later" on "Batch_Run_Edit" should contains "Error_Messages"."One_Day_Option"
+ Then verify "Schedule_Button" not input element in "Schedule_For_Later" on "Batch_Run_Edit" wizard is disabled
+
+ Scenario: MLJW035 - Check environment variables table types components on Batch Run in Advanced section
+ Given open url
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Jobs and workflows" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ And click on "Butch_Run_Button" element on "Jobs_Monitor_Tab" wizard
+ And wait load page
+ Then verify "Next_Button" element on "Batch_Run" wizard is disabled
+ And click on row root with value "test" in "name" column in "Functions_Table" table on "Batch_Run" wizard
+ Then "Function_Title" element on "Batch_Run" should contains "test" value
+ Then verify "Next_Button" element on "Batch_Run" wizard is enabled
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ Then "Batch_Run_Header" element on "Batch_Run" should contains "Batch Run" value
+ Then "Form_Header_Batch_Run" element on "Batch_Run" should contains "Advanced" value
+ Then verify "Accordion_Subheader" element visibility in "Advanced_Accordion" on "Batch_Run_Edit" wizard
+ Then "Accordion_Subheader" element in "Advanced_Accordion" on "Batch_Run_Edit" should contains "Environment variables" value
+ Then verify "Advanced_Environment_Variables_Table" element visibility on "Batch_Run_Edit" wizard
+ Then verify data in "Advanced_Environment_Variables_Table" table on "Batch_Run_Edit" wizard
+ | name_verify | type_dropdown_verify | value_verify |
+ | V3IO_API | value | http://v3io-webapi:8081 |
+ | V3IO_USERNAME | value | pipelines |
+ | V3IO_ACCESS_KEY | value | b1410f67-92a9-41fd-9413-6d0015c493fd |
+ | V3IO_FRAMESD | value | http://framesd:8080 |
+ Then edit dropdown field 1 row in "Advanced_Environment_Variables_Table" key-value table on "Batch_Run_Edit" wizard
+ | type_dropdown | value_input | value_input_key |
+ | Secret | sectretName1 | sectretKey1 |
+ Then edit dropdown field 3 row in "Advanced_Environment_Variables_Table" key-value table on "Batch_Run_Edit" wizard
+ | type_dropdown | value_input | value_input_key |
+ | Secret | sectretName2 | sectretKey2 |
+ Then verify data in "Advanced_Environment_Variables_Table" table on "Batch_Run_Edit" wizard
+ | name_verify | type_dropdown_verify | value_verify |
+ | V3IO_API | secret | sectretName1:sectretKey1 |
+ | V3IO_USERNAME | value | pipelines |
+ | V3IO_ACCESS_KEY | secret | sectretName2:sectretKey2 |
+ | V3IO_FRAMESD | value | http://framesd:8080 |
+
+Scenario: MLJW036 - Check setting schedule for a job - Batch Run - Schedule for later
+ Given open url
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Jobs and workflows" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ And click on "Butch_Run_Button" element on "Jobs_Monitor_Tab" wizard
+ And wait load page
+ Then verify "Next_Button" element on "Batch_Run" wizard is disabled
+ And click on row root with value "test" in "name" column in "Functions_Table" table on "Batch_Run" wizard
+ Then "Function_Title" element on "Batch_Run" should contains "test" value
+ Then verify "Next_Button" element on "Batch_Run" wizard is enabled
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Schedule_for_later_Button" element on "Batch_Run" wizard
+ Then verify "Time_unit_Dropdown" element visibility in "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then verify "Time_unit_Dropdown" element in "Schedule_For_Later" on "Batch_Run_Edit" wizard should contains "Dropdown_Options"."Time_Unit_Options"
+ # check weekly options
+ Then select "Weekly" option in "Time_unit_Dropdown" dropdown on "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then verify "Schedule_item_Sunday" not input element in "Schedule_For_Later" on "Batch_Run_Edit" wizard is NOT active
+ When click on "Schedule_item_Sunday" element in "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then verify "Schedule_item_Sunday" not input element in "Schedule_For_Later" on "Batch_Run_Edit" wizard is active
+ Then verify "Schedule_item_Monday" not input element in "Schedule_For_Later" on "Batch_Run_Edit" wizard is active
+ When click on "Schedule_item_Monday" element in "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then verify "Schedule_item_Monday" not input element in "Schedule_For_Later" on "Batch_Run_Edit" wizard is NOT active
+ Then verify "Schedule_item_Tuesday" not input element in "Schedule_For_Later" on "Batch_Run_Edit" wizard is active
+ When click on "Schedule_item_Tuesday" element in "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then verify "Schedule_item_Tuesday" not input element in "Schedule_For_Later" on "Batch_Run_Edit" wizard is NOT active
+ Then verify "Schedule_item_Wednesday" not input element in "Schedule_For_Later" on "Batch_Run_Edit" wizard is active
+ When click on "Schedule_item_Wednesday" element in "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then verify "Schedule_item_Wednesday" not input element in "Schedule_For_Later" on "Batch_Run_Edit" wizard is NOT active
+ Then verify "Schedule_item_Thursday" not input element in "Schedule_For_Later" on "Batch_Run_Edit" wizard is active
+ When click on "Schedule_item_Thursday" element in "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then verify "Schedule_item_Thursday" not input element in "Schedule_For_Later" on "Batch_Run_Edit" wizard is NOT active
+ Then verify "Schedule_item_Friday" not input element in "Schedule_For_Later" on "Batch_Run_Edit" wizard is active
+ When click on "Schedule_item_Friday" element in "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then verify "Schedule_item_Friday" not input element in "Schedule_For_Later" on "Batch_Run_Edit" wizard is NOT active
+ Then verify "Schedule_item_Saturday" not input element in "Schedule_For_Later" on "Batch_Run_Edit" wizard is NOT active
+ When click on "Schedule_item_Saturday" element in "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then verify "Schedule_item_Saturday" not input element in "Schedule_For_Later" on "Batch_Run_Edit" wizard is active
+ # check minute options
+ Then select "Minute" option in "Time_unit_Dropdown" dropdown on "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then verify "Intervals_Dropdown" element visibility in "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then verify "Intervals_Dropdown" element in "Schedule_For_Later" on "Batch_Run_Edit" wizard should contains "Dropdown_Options"."Minute_Intervals_Dropdown_Options"
+ Then select "Every 30" option in "Intervals_Dropdown" dropdown on "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then select "Every 20" option in "Intervals_Dropdown" dropdown on "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then select "Every 15" option in "Intervals_Dropdown" dropdown on "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then select "Every 10" option in "Intervals_Dropdown" dropdown on "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ # check hourly options
+ Then select "Hourly" option in "Time_unit_Dropdown" dropdown on "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then verify "Intervals_Dropdown" element visibility in "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then verify "Intervals_Dropdown" element in "Schedule_For_Later" on "Batch_Run_Edit" wizard should contains "Dropdown_Options"."Hour_Intervals_Dropdown_Options"
+ Then select "Every 12" option in "Intervals_Dropdown" dropdown on "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then select "Every 6" option in "Intervals_Dropdown" dropdown on "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then select "Every 4" option in "Intervals_Dropdown" dropdown on "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then select "Every 3" option in "Intervals_Dropdown" dropdown on "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then select "Every 2" option in "Intervals_Dropdown" dropdown on "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then select "Every 1" option in "Intervals_Dropdown" dropdown on "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ # check daily options
+ Then select "Daily" option in "Time_unit_Dropdown" dropdown on "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then verify "At_time_Input" element visibility in "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then type value "23:23" to "At_time_Input" field on "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then type value "15:15" to "At_time_Input" field on "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then type value "01:45" to "At_time_Input" field on "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ # check monthly options
+ Then select "Monthly" option in "Time_unit_Dropdown" dropdown on "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then verify "At_time_Input" element visibility in "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then type value "23:23" to "At_time_Input" field on "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then type value "15:15" to "At_time_Input" field on "Schedule_For_Later" on "Batch_Run_Edit" wizard
+ Then type value "01:45" to "At_time_Input" field on "Schedule_For_Later" on "Batch_Run_Edit" wizard
+
+ Scenario: MLJW045 - Check back navigation from Job overview to Jobs Monitor tab and forward to Job overview
+ Given open url
+ And wait load page
+ And click on row root with value "cat-vs-dog-classification" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Jobs and workflows" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And hover "MLRun_Logo" component on "commonPagesHeader" wizard
+ And wait load page
+ When select "Any time" option in "Start_Time_Filter_Dropdown" filter dropdown on "Jobs_Monitor_Tab" wizard
+ And wait load page
+ When click on cell with row index 1 in "name" column in "Jobs_Monitor_Table" table on "Jobs_Monitor_Tab" wizard
+ When click on cell with row index 1 in "name" column in "Jobs_Monitor_Table" table on "Jobs_Monitor_Tab" wizard
+ And wait load page
+ Then verify redirection to "projects/cat-vs-dog-classification/jobs/monitor-jobs/sef/cf842616c89347c7bb7bca2c9e840a21/overview"
+ Then verify "Info_Pane_Tab_Selector" element visibility on "Jobs_Monitor_Tab_Info_Pane" wizard
+ Then verify "Info_Pane_Tab_Selector" on "Jobs_Monitor_Tab_Info_Pane" wizard should contains "Jobs_Monitor_Tab_Info_Pane"."Tab_List"
+ Then navigate back
+ And wait load page
+ Then verify redirection to "projects/cat-vs-dog-classification/jobs/monitor-jobs/sef"
+ Then navigate back
+ And wait load page
+ Then verify redirection to "projects/cat-vs-dog-classification/jobs/monitor-jobs"
+ Then navigate forward
+ And wait load page
+ Then verify redirection to "projects/cat-vs-dog-classification/jobs/monitor-jobs/sef"
+ Then navigate forward
+ And wait load page
+ Then verify redirection to "projects/cat-vs-dog-classification/jobs/monitor-jobs/sef/cf842616c89347c7bb7bca2c9e840a21/overview"
+ Then verify "Info_Pane_Tab_Selector" element visibility on "Jobs_Monitor_Tab_Info_Pane" wizard
+ Then verify "Info_Pane_Tab_Selector" on "Jobs_Monitor_Tab_Info_Pane" wizard should contains "Jobs_Monitor_Tab_Info_Pane"."Tab_List"
+
+ Scenario: MLJW046 - Check components in Parameters section on Batch Run wizard with checked Hyper
+ Given open url
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Jobs and workflows" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ And click on "Butch_Run_Button" element on "Jobs_Monitor_Tab" wizard
+ And wait load page
+ And click on row root with value "test" in "name" column in "Functions_Table" table on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ Then check "Hyperparameter_Checkbox" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ And click on "Next_Button" element on "Batch_Run" wizard
+ Then "Form_Header_Batch_Run" element on "Batch_Run" should contains "Parameters" value
+ Then verify "Data_Inputs_Headers" on "Batch_Run" wizard should contains "Batch_Run"."Parameters_Table_Header_Hyper"
+ Then verify "Parameters_From_UI_Radiobutton" element visibility in "Parameters_Accordion" on "Batch_Run_Edit" wizard
+ Then is "Parameters_From_UI_Radiobutton" in "Parameters_Accordion" on "Batch_Run_Edit" selected
+ And click on "Add_Custom_Parameter_Button" element on "Batch_Run" wizard
+ Then verify "Hyper_Toggle_Switch" element visibility in "Parameters_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "Parameters_From_File_Radiobutton" element visibility in "Parameters_Accordion" on "Batch_Run_Edit" wizard
+ Then is not "Parameters_From_File_Radiobutton" in "Parameters_Accordion" on "Batch_Run_Edit" selected
+ Then verify "Parameters_From_File_Input" element visibility in "Parameters_Accordion" on "Batch_Run_Edit" wizard
+ Then verify "Parameters_From_File_Input" element in "Parameters_Accordion" on "Batch_Run_Edit" wizard is disabled by class name
+ When select "Parameters_From_File_Radiobutton" in "Parameters_Accordion" on "Batch_Run_Edit"
+ And wait load page
+ Then verify "Parameters_From_File_Input" element in "Parameters_Accordion" on "Batch_Run_Edit" wizard is enabled by class name
+ Then verify "Data_Inputs_Headers" on "Batch_Run" wizard should contains "Batch_Run"."Parameters_Table_Header"
+ Then verify "Hyper_Toggle_Switch" element not exists in "Parameters_Accordion" on "Batch_Run_Edit" wizard
\ No newline at end of file
diff --git a/tests/features/models.feature b/tests/features/models.feature
index 392066a0b..1a3fc2fa2 100644
--- a/tests/features/models.feature
+++ b/tests/features/models.feature
@@ -3,10 +3,9 @@ Feature: Models Page
Testcases that verifies functionality on Models Page
@FAILED_TODO
- #TODO: Table_Labels_Filter_Input, Table_Tree_Filter_Dropdown, Show_Iterations_Checkbox, Table_Tree_Filter_Dropdown elements were redesigned, need tests rewrite
- #TODO: Register_Model_Button hidden till 5.1, running on demo mode
+ #TODO: Register_Model_Button hidden till 1.5, running on demo mode
@passive
- Scenario: Check all mandatory components on Models tab
+ Scenario: MLM001 - Check all mandatory components on Models tab
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -22,18 +21,19 @@ Feature: Models Page
Then verify breadcrumbs "tab" label should be equal "Models" value
Then verify "Models_Tab_Selector" on "Models" wizard should contains "Models"."Tab_List"
Then verify "Table_Name_Filter_Input" element visibility on "Models" wizard
- Then verify "Table_Labels_Filter_Input" element visibility on "Models" wizard
- Then verify "Table_Tree_Filter_Dropdown" element visibility on "Models" wizard
- Then verify "Show_Iterations_Checkbox" element visibility on "Models" wizard
+ Then click on "Table_FilterBy_Button" element on "Models" wizard
+ Then verify "Table_Label_Filter_Input" element visibility on "Artifacts_FilterBy_Popup" wizard
+ Then verify "Table_Tree_Filter_Dropdown" element visibility on "Artifacts_FilterBy_Popup" wizard
+ Then verify "Table_Tree_Filter_Dropdown" dropdown element on "Artifacts_FilterBy_Popup" wizard should contains "Dropdown_Options"."Tag_Filer_Options"
+ Then verify "Show_Iterations_Checkbox" element visibility on "Artifacts_FilterBy_Popup" wizard
Then verify "Table_Refresh_Button" element visibility on "Models" wizard
Then verify "Models_Table" element visibility on "Models" wizard
And turn on demo mode
Then verify "Register_Model_Button" element visibility on "Models" wizard
Then "Register_Model_Button" element on "Models" should contains "Register Model" value
- Then verify "Table_Tree_Filter_Dropdown" dropdown element on "Models" wizard should contains "Dropdown_Options"."Tag_Filer_Options"
@passive
- Scenario: Check all mandatory components on Model Endpoints tab
+ Scenario: MLM002 - Check all mandatory components on Model Endpoints tab
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -56,7 +56,7 @@ Feature: Models Page
Then verify "Model_Endpoints_Table" element visibility on "Model_Endpoints" wizard
@passive
- Scenario: Check all mandatory components on Real-Time Pipelines tab
+ Scenario: MLM003 - Check all mandatory components on Real-Time Pipelines tab
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -78,7 +78,7 @@ Feature: Models Page
Then verify "Real_Time_Pipelines_Table" element visibility on "Real_Time_Pipelines" wizard
@passive
- Scenario: Verify filtering by model name on Models tab
+ Scenario: MLM004 - Verify filtering by model name on Models tab
Given open url
And wait load page
And click on row root with value "churn-project-admin" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -93,37 +93,39 @@ Feature: Models Page
And wait load page
Then value in "name" column with "text" in "Models_Table" on "Models" wizard should contains "survival"
- @FAILED_TODO
- #TODO: Show_Iterations_Checkbox element was redesigned, need tests rewrite
- #TODO: class table__content was changed, need modelsTable components rewrite (affects the 'click on cell with row index','expand_btn', 'Header element' cases)
@passive
- Scenario: Verify behaviour of Show iterations checkbox on Models tab
- * set tear-down property "model" created in "default" project with "automation-model" value
- * create "automation-model" Model with "latest" tag in "default" project with code 200
+ Scenario: MLM005 - Verify behaviour of Show iterations checkbox on Models tab
Given open url
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
And wait load page
And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
And click on cell with value "Models" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
And wait load page
- Then verify "Show_Iterations_Checkbox" element visibility on "Models" wizard
- Then check "Show_Iterations_Checkbox" element on "Models" wizard
+ Then click on "Table_FilterBy_Button" element on "Models" wizard
+ Then verify "Show_Iterations_Checkbox" element visibility on "Artifacts_FilterBy_Popup" wizard
+ Then check "expand_btn" not presented in "Models_Table" on "Models" wizard
+ Then uncheck "Show_Iterations_Checkbox" element on "Artifacts_FilterBy_Popup" wizard
+ Then click on "Apply_Button" element on "Artifacts_FilterBy_Popup" wizard
And wait load page
- Then "Show_Iterations_Checkbox" element should be checked on "Models" wizard
+ Then click on "Table_FilterBy_Button" element on "Models" wizard
+ Then "Show_Iterations_Checkbox" element should be unchecked on "Artifacts_FilterBy_Popup" wizard
Then check "expand_btn" visibility in "Models_Table" on "Models" wizard
Then click on cell with row index 1 in "expand_btn" column in "Models_Table" table on "Models" wizard
And wait load page
Then click on cell with row index 1 in "name" column in "Models_Table" table on "Models" wizard
Then verify "Header" element visibility on "Models_Info_Pane" wizard
- Then uncheck "Show_Iterations_Checkbox" element on "Models" wizard
+ Then click on "Table_FilterBy_Button" element on "Models" wizard
+ Then check "Show_Iterations_Checkbox" element on "Artifacts_FilterBy_Popup" wizard
+ Then click on "Apply_Button" element on "Artifacts_FilterBy_Popup" wizard
And wait load page
Then verify "Header" element not exists on "Models_Info_Pane" wizard
- Then "Show_Iterations_Checkbox" element should be unchecked on "Models" wizard
+ Then click on "Table_FilterBy_Button" element on "Models" wizard
+ Then "Show_Iterations_Checkbox" element should be checked on "Artifacts_FilterBy_Popup" wizard
@FAILED_TODO
- #TODO: class table__content was changed, need realTimePipelinesTable components rewrite (affects the last case)
+ #TODO: no Real-time pipelines data to show for "Name: churn-server" - add data
@passive
- Scenario: Verify filtering by name on Real-Time Pipelines tab
+ Scenario: MLM006 - Verify filtering by name on Real-Time Pipelines tab
Given open url
And wait load page
And click on row root with value "churn-project-admin" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -147,10 +149,8 @@ Feature: Models Page
And wait load page
Then value in "name" column with "text" in "Real_Time_Pipelines_Table" on "Real_Time_Pipelines" wizard should contains "churn-server"
- @FAILED_TODO
- #TODO: Table_Labels_Filter_Input element was redesigned, need tests rewrite
@passive
- Scenario: Verify filtering by label with key on Models tab
+ Scenario: MLM007 - Verify filtering by label with key on Models tab
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -158,21 +158,25 @@ Feature: Models Page
And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
And click on cell with value "Models" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
And wait load page
- #Then type value "my-key" to "Table_Labels_Filter_Input" field on "Models" wizard
- Then click on "Table_Refresh_Button" element on "Models" wizard
+ Then click on "Table_FilterBy_Button" element on "Models" wizard
+ Then type value "my-key" to "Table_Label_Filter_Input" field on "Artifacts_FilterBy_Popup" wizard
+ Then click on "Apply_Button" element on "Artifacts_FilterBy_Popup" wizard
And wait load page
- Then value in "labels" column with "dropdowns" in "Models_Table" on "Models" wizard should contains "my-key"
- Then type value "my-key=my-value" to "Table_Labels_Filter_Input" field on "Models" wizard
- Then click on "Table_Refresh_Button" element on "Models" wizard
+ Then value in "labels" column with "dropdowns" in "Models_Table" on "Models" wizard should contains "my-key" in "Overlay"
+ Then click on "Table_FilterBy_Button" element on "Models" wizard
+ Then type value "my-key=my-value" to "Table_Label_Filter_Input" field on "Artifacts_FilterBy_Popup" wizard
+ Then click on "Apply_Button" element on "Artifacts_FilterBy_Popup" wizard
And wait load page
- Then value in "labels" column with "dropdowns" in "Models_Table" on "Models" wizard should contains "my-key=my-value"
- Then type value "MY-KEY" to "Table_Labels_Filter_Input" field on "Models" wizard
- Then click on "Table_Refresh_Button" element on "Models" wizard
+ Then value in "labels" column with "dropdowns" in "Models_Table" on "Models" wizard should contains "my-key=my-value" in "Overlay"
+ Then click on "Table_FilterBy_Button" element on "Models" wizard
+ Then type value "MY-KEY" to "Table_Label_Filter_Input" field on "Artifacts_FilterBy_Popup" wizard
+ Then click on "Apply_Button" element on "Artifacts_FilterBy_Popup" wizard
And wait load page
And verify "No_Data_Message" element visibility on "commonPagesHeader" wizard
+ Then "No_Data_Message" component on "commonPagesHeader" should contains "No_Data_Message"."No_Models_data"
@passive
- Scenario: Verify filtering by label on Model Endpoints tab
+ Scenario: MLM008 - Verify filtering by label on Model Endpoints tab
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -187,23 +191,23 @@ Feature: Models Page
Then type value "my-key" to "Table_Label_Filter_Input" field on "Model_Endpoints" wizard
Then click on "Table_Refresh_Button" element on "Model_Endpoints" wizard
And wait load page
- Then value in "labels" column with "dropdowns" in "Model_Endpoints_Table" on "Model_Endpoints" wizard should contains "my-key=my-value"
+ Then value in "labels" column with "dropdowns" in "Model_Endpoints_Table" on "Model_Endpoints" wizard should contains "my-key=my-value" in "Overlay"
Then type value "my-key=my-value" to "Table_Label_Filter_Input" field on "Model_Endpoints" wizard
Then click on "Table_Refresh_Button" element on "Model_Endpoints" wizard
And wait load page
- Then value in "labels" column with "dropdowns" in "Model_Endpoints_Table" on "Model_Endpoints" wizard should contains "my-key=my-value"
+ Then value in "labels" column with "dropdowns" in "Model_Endpoints_Table" on "Model_Endpoints" wizard should contains "my-key=my-value" in "Overlay"
Then type value "MY-KEY" to "Table_Label_Filter_Input" field on "Model_Endpoints" wizard
Then click on "Table_Refresh_Button" element on "Model_Endpoints" wizard
And wait load page
And verify "No_Data_Message" element visibility on "commonPagesHeader" wizard
@FAILED_TODO
- #TODO: Register_Model_Button hidden till 5.1, running in demo mode
+ #TODO: Register_Model_Button hidden till 1.5, running in demo mode
#TODO: warning "Input_Hint"."Input_Field_Invalid" was redesigned, need case rewrite (now it's dropdown warning)
#TODO: 'New_File_Target_Path_Input' was redesigned, need case rewrite (also affects on 'Register_Button' anable)
#TODO: artifactsLabelsTable class components was changed, need to rewrite locators structure (affects the 'Labels_Table', 'remove_btn' cases)
@passive
- Scenario: Check all mandatory components on Register Model Popup
+ Scenario: MLM009 - Check all mandatory components on Register Model Popup
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -289,9 +293,9 @@ Feature: Models Page
Then verify "Title" element not exists on "Register_Model_Popup" wizard
@FAILED_TODO
- #TODO: Register_Model_Button hidden till 5.1, running on demo mode
+ #TODO: Register_Model_Button hidden till 1.5, running on demo mode
#TODO: 'New_File_Target_Path_Input' was redesigned, need case rewrite (also affects on all cases below)
- Scenario: Verify behaviour on Register new Model
+ Scenario: MLM010 - Verify behaviour on Register new Model
* set tear-down property "model" created in "default" project with "automation-model" value
Given open url
And wait load page
@@ -314,7 +318,7 @@ Feature: Models Page
Then check "model.txt" value in "model_file" column in "Overview_Table" table on "Models_Info_Pane" wizard
@passive
- Scenario: Check MLRun logo redirection
+ Scenario: MLM011 - Check MLRun logo redirection
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -327,10 +331,8 @@ Feature: Models Page
And wait load page
Then verify "Projects_Table" element visibility on "Projects" wizard
- @FAILED_TODO
- #TODO: 'Show_Iterations_Checkbox' located in filter dropdown - new implementation, need rewrite step (also affects 'expand_btn' appears and steps below)
@passive
- Scenario: Verify View YAML action
+ Scenario: MLM012 - Verify View YAML action
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -344,15 +346,18 @@ Feature: Models Page
Then verify "Cross_Cancel_Button" element visibility on "View_YAML" wizard
Then verify "YAML_Modal_Container" element visibility on "View_YAML" wizard
Then click on "Cross_Cancel_Button" element on "View_YAML" wizard
- Then check "Show_Iterations_Checkbox" element on "Models" wizard
+ Then click on "Table_FilterBy_Button" element on "Models" wizard
+ Then uncheck "Show_Iterations_Checkbox" element on "Artifacts_FilterBy_Popup" wizard
+ Then click on "Apply_Button" element on "Artifacts_FilterBy_Popup" wizard
+ And wait load page
Then click on cell with row index 1 in "expand_btn" column in "Models_Table" table on "Models" wizard
- Then select "View YAML" option in action menu on "Models" wizard in "Models_Table" table at row with "latest #0" value in "name" column
+ Then select "View YAML" option in action menu on "Models" wizard in "Models_Table" table at row with "latest" value in "name_expand_btn" column
Then verify if "View_YAML" popup dialog appears
Then verify "Cross_Cancel_Button" element visibility on "View_YAML" wizard
Then verify "YAML_Modal_Container" element visibility on "View_YAML" wizard
@passive
- Scenario: Verify View YAML action in Item infopane
+ Scenario: MLM013 - Verify View YAML action in Item infopane
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -368,12 +373,8 @@ Feature: Models Page
Then verify "Cross_Cancel_Button" element visibility on "View_YAML" wizard
Then verify "YAML_Modal_Container" element visibility on "View_YAML" wizard
- @FAILED_TODO
- #TODO: 'Preview' tab doesn't exist in 'model_default' model - new conditions for mandatory tabs (generateModelsDetailsMenu() - Preview, Features, Statistics)
- #TODO: 'Features' tab doesn't exist in 'model_default' model - new conditions for mandatory tabs (generateModelsDetailsMenu() - Preview, Features, Statistics)
- #TODO: 'Statistics' tab doesn't exist in 'model_default' model - new conditions for mandatory tabs (generateModelsDetailsMenu() - Preview, Features, Statistics)
@passive
- Scenario: Check all mandatory components in Item infopane on Overview tab table
+ Scenario: MLM014 - Check all mandatory components in Item infopane on Overview tab table
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -382,7 +383,7 @@ Feature: Models Page
And click on cell with value "Models" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
And hover "MLRun_Logo" component on "commonPagesHeader" wizard
And wait load page
- When click on cell with row index 2 in "name" column in "Models_Table" table on "Models" wizard
+ When click on cell with row index 1 in "name" column in "Models_Table" table on "Models" wizard
Then verify "Info_Pane_Tab_Selector" element visibility on "Models_Info_Pane" wizard
Then verify "Info_Pane_Tab_Selector" on "Models_Info_Pane" wizard should contains "Models_Info_Pane"."Tab_List_Extended"
Then verify "Overview" tab is active in "Info_Pane_Tab_Selector" on "Models_Info_Pane" wizard
@@ -390,6 +391,7 @@ Feature: Models Page
Then verify "Updated" element visibility on "Models_Info_Pane" wizard
Then verify "Download_Button" element visibility on "Models_Info_Pane" wizard
Then verify "Cross_Close_Button" element visibility on "Models_Info_Pane" wizard
+ Then verify "Full_View_Button" element visibility on "Models_Info_Pane" wizard
Then verify "Overview_General_Headers" on "Models_Info_Pane" wizard should contains "Models_Info_Pane"."Overview_General_Headers"
Then verify "Overview_Hash_Header" on "Models_Info_Pane" wizard should display "Label_Hint"."Overview_Hash"
Then verify "Overview_UID_Header" on "Models_Info_Pane" wizard should display "Label_Hint"."Overview_UID"
@@ -403,11 +405,15 @@ Feature: Models Page
Then verify "Statistics" tab is active in "Info_Pane_Tab_Selector" on "Models_Info_Pane" wizard
Then verify cell with "Statistics" value in "key" column in "Info_Pane_Tab_Selector" table on "Models_Info_Pane" wizard should display "Label_Hint"."Models_Statistics"
Then verify "Models" tab is active in "Models_Tab_Selector" on "Models" wizard
+ Then click on "Full_View_Button" element on "Models_Info_Pane" wizard
+ Then verify "Cross_Close_Button" element not exists on "Models_Info_Pane" wizard
+ Then click on "Tabel_View_Button" element on "Models_Info_Pane" wizard
+ Then verify "Cross_Close_Button" element visibility on "Models_Info_Pane" wizard
@FAILED_TODO
#TODO: 'Apply_Changes_Button' implementation was changed - button is invisible before any changes
#TODO: verify, remove, verify changes with 'Labels_Table' - invalid selector: An invalid or illegal selector was specified
- Scenario: Check all mandatory components in Item infopane on Overview tab table
+ Scenario: MLM015 - Check all mandatory components in Item infopane on Overview tab table
* set tear-down property "model" created in "default" project with "test-model" value
* create "test-model" Model with "latest" tag in "default" project with code 200
Given open url
@@ -456,7 +462,7 @@ Feature: Models Page
Then verify "Apply_Changes_Button" element on "Models_Info_Pane" wizard is disabled
@passive
- Scenario: Check all mandatory components in Item infopane on Overview tab table on Model Endpoints tab
+ Scenario: MLM016 - Check all mandatory components in Item infopane on Overview tab table on Model Endpoints tab
Given open url
And wait load page
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -478,9 +484,6 @@ Feature: Models Page
Then verify "Overview_General_Headers" on "Models_Info_Pane" wizard should contains "Models_Endpoints_Info_Pane"."Overview_General_Headers"
Then verify "Overview_Drift_Headers" on "Models_Info_Pane" wizard should contains "Models_Endpoints_Info_Pane"."Overview_Drift_Headers"
- @FAILED_TODO
- #TODO: 'Table_Tree_Filter_Dropdown' was redesigned, need case rewrite
- #TODO: "Overview" tab is active - invalid selector
@passive
Scenario: Check Details panel still active on page refresh
* set tear-down property "model" created in "default" project with "test-model" value
@@ -492,7 +495,9 @@ Feature: Models Page
And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
And click on cell with value "Models" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
And wait load page
- Then select "v1" option in "Table_Tree_Filter_Dropdown" dropdown on "Models" wizard
+ Then click on "Table_FilterBy_Button" element on "Models" wizard
+ Then select "v1" option in "Table_Tree_Filter_Dropdown" dropdown on "Artifacts_FilterBy_Popup" wizard
+ Then click on "Apply_Button" element on "Artifacts_FilterBy_Popup" wizard
And wait load page
When click on cell with value "test-model" in "name" column in "Models_Table" table on "Models" wizard
Then verify "Info_Pane_Tab_Selector" element visibility on "Models_Info_Pane" wizard
@@ -521,9 +526,6 @@ Feature: Models Page
When click on "Expand_Sources" element on "Models_Info_Pane" wizard
Then verify "Info_Sources_Table" element visibility on "Models_Info_Pane" wizard
- @FAILED_TODO
- #TODO: block with 'Deploy', 'Add a tag', 'View YAML' is reimplemented
- #TODO: select "Deploy" option in action menu on "Models" - doesn't click on dropdown '...' and option 'Deploy' (after manual clicks all next 71 steps passed)
@passive
Scenario: Check all mandatory components on Deploy Model Popup
* set tear-down property "function" created in "default" project with "automation-test-function-1" value
@@ -539,6 +541,7 @@ Feature: Models Page
And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
And click on cell with value "Models" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
And wait load page
+ And hover "MLRun_Logo" component on "commonPagesHeader" wizard
Then select "Deploy" option in action menu on "Models" wizard in "Models_Table" table at row with "automation-test-model" value in "name" column
Then verify if "Deploy_Model_Popup" popup dialog appears
Then navigate back
@@ -555,7 +558,7 @@ Feature: Models Page
Then verify "Model_Name_Input" element visibility on "Deploy_Model_Popup" wizard
Then verify "Model_Name_Input" input should contains "automation-test-model" value on "Deploy_Model_Popup" wizard
Then type value " " to "Model_Name_Input" field on "Deploy_Model_Popup" wizard
- Then verify "Model_Name_Input" on "Deploy_Model_Popup" wizard should display options "Input_Hint"."Artifact_Name_Hint"
+ Then verify "Model_Name_Input" on "Deploy_Model_Popup" wizard should display options "Input_Hint"."Artifact_Name_Hint_Deploy_Model"
Then verify "Model_Name_Input" options rules on form "Deploy_Model_Popup" wizard
Then verify "Model_Name_Input" on "Deploy_Model_Popup" wizard should display "Input_Hint"."Deploy_Model_Name_Hint"
Then verify "Class_Name_Input" element visibility on "Deploy_Model_Popup" wizard
@@ -567,7 +570,7 @@ Feature: Models Page
Then "Deploy_Button" element on "Deploy_Model_Popup" should contains "Deploy" value
Then click on "Deploy_Button" element on "Deploy_Model_Popup" wizard
Then verify "Deploy_Button" element on "Deploy_Model_Popup" wizard is disabled
- Then verify "Model_Name_Input" on "Deploy_Model_Popup" wizard should display options "Input_Hint"."Artifact_Name_Hint"
+ Then verify "Model_Name_Input" on "Deploy_Model_Popup" wizard should display options "Input_Hint"."Artifact_Name_Hint_Deploy_Model"
Then type value "automation-test-model" to "Model_Name_Input" field on "Deploy_Model_Popup" wizard
Then verify "Class_Name_Input" on "Deploy_Model_Popup" wizard should display warning "Input_Hint"."Input_Field_Invalid"
Then type value "Class" to "Class_Name_Input" field on "Deploy_Model_Popup" wizard
@@ -600,7 +603,6 @@ Feature: Models Page
Then verify "Title" element not exists on "Deploy_Model_Popup" wizard
@FAILED_TODO
- #TODO: select "Deploy" option in action menu on "Models" - doesn't click on dropdown '...' and option 'Deploy'
#TODO: locators structure of 'Add class argument'was changed - need change locators
Scenario: Verify behaviour of key-value table on Deploy Model Popup
* set tear-down property "model" created in "default" project with "automation-test-model" value
@@ -612,6 +614,7 @@ Feature: Models Page
And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
And click on cell with value "Models" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
And wait load page
+ And hover "MLRun_Logo" component on "commonPagesHeader" wizard
Then select "Deploy" option in action menu on "Models" wizard in "Models_Table" table at row with "automation-test-model" value in "name" column
Then verify if "Deploy_Model_Popup" popup dialog appears
When add new volume rows to "Key_Value_Table" table in "Deploy_Model_Table" on "Deploy_Model_Popup" wizard using nontable inputs
@@ -803,4 +806,79 @@ Feature: Models Page
Then verify "Overview" tab is active in "Info_Pane_Tab_Selector" on "Models_Info_Pane" wizard
Then verify "Header" element visibility on "Models_Info_Pane" wizard
Then save to context "name" column on 2 row from "Models_Table" table on "Models" wizard
- Then compare "Header" element value on "Models_Info_Pane" wizard with test "name" context value
\ No newline at end of file
+ Then compare "Header" element value on "Models_Info_Pane" wizard with test "name" context value
+
+ Scenario: MLM020 - Check that version tag is filled when edit it in table view and full view on Overview tab table on Models page
+ Given open url
+ And wait load page
+ And click on row root with value "churn-project-admin" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Models" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And hover "MLRun_Logo" component on "commonPagesHeader" wizard
+ And wait load page
+ When click on cell with row index 1 in "name" column in "Models_Table" table on "Models" wizard
+ Then verify "Info_Pane_Tab_Selector" on "Models_Info_Pane" wizard should contains "Models_Info_Pane"."Tab_List_Extended"
+ Then verify "Overview" tab is active in "Info_Pane_Tab_Selector" on "Models_Info_Pane" wizard
+ Then verify "Overview_General_Headers" on "Models_Info_Pane" wizard should contains "Models_Info_Pane"."Overview_General_Headers"
+ Then check "latest" value in "tag" column in "Overview_Table" table on "Models_Info_Pane" wizard
+ Then click on "Edit_btn_table_view" element on "Models_Info_Pane" wizard
+ Then verify "Version_tag_Input_table_view" on "Models_Info_Pane" wizard should contains "latest" value
+ Then click on "Full_View_Button" element on "Models_Info_Pane" wizard
+ Then verify "Cross_Close_Button" element not exists on "Models_Info_Pane" wizard
+ Then click on "Edit_btn_full_view" element on "Models_Info_Pane" wizard
+ Then verify "Version_tag_Input_full_view" on "Models_Info_Pane" wizard should contains "latest" value
+ Then click on "Tabel_View_Button" element on "Models_Info_Pane" wizard
+ Then verify "Cross_Close_Button" element visibility on "Models_Info_Pane" wizard
+
+ Scenario: MLM021 - Check that version tag dropdown shows all tags on filters wizard on Models page
+ Given open url
+ And wait load page
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Models" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ When click on cell with row index 2 in "name" column in "Models_Table" table on "Models" wizard
+ Then verify "Info_Pane_Tab_Selector" on "Models_Info_Pane" wizard should contains "Models_Info_Pane"."Tab_List"
+ Then verify "Overview" tab is active in "Info_Pane_Tab_Selector" on "Models_Info_Pane" wizard
+ Then verify "Overview_General_Headers" on "Models_Info_Pane" wizard should contains "Models_Info_Pane"."Overview_General_Headers"
+ Then check "latest" value in "tag" column in "Overview_Table" table on "Models_Info_Pane" wizard
+ Then click on "Edit_btn_table_view" element on "Models_Info_Pane" wizard
+ And wait load page
+ When type value "newTag" to "Version_tag_Input" field on "Models_Info_Pane" wizard
+ Then click on "Apply_Button" element on "Models_Info_Pane" wizard
+ Then click on "Apply_Changes_Button" element on "Models_Info_Pane" wizard
+ And wait load page
+ Then verify "Table_FilterBy_Button" element visibility on "Models" wizard
+ Then click on "Table_FilterBy_Button" element on "Models" wizard
+ Then select "newTag" option in "Table_Tree_Filter_Dropdown" dropdown on "Artifacts_FilterBy_Popup" wizard
+ Then click on "Apply_Button" element on "Artifacts_FilterBy_Popup" wizard
+ And wait load page
+ Then check "newTag" value in "tag" column in "Models_Table" table on "Models" wizard
+
+Scenario: MLM023 - Check that version tag has "Click to add" status when it's empty after edited
+ Given open url
+ And wait load page
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ And click on cell with value "Models" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ When click on cell with row index 1 in "name" column in "Models_Table" table on "Models" wizard
+ Then verify "Info_Pane_Tab_Selector" on "Models_Info_Pane" wizard should contains "Models_Info_Pane"."Tab_List_Extended"
+ Then verify "Overview" tab is active in "Info_Pane_Tab_Selector" on "Models_Info_Pane" wizard
+ Then verify "Overview_General_Headers" on "Models_Info_Pane" wizard should contains "Models_Info_Pane"."Overview_General_Headers"
+ Then check "latest" value in "tag" column in "Overview_Table" table on "Models_Info_Pane" wizard
+ Then click on "Edit_btn_table_view" element on "Models_Info_Pane" wizard
+ Then type value "" to "Version_tag_Input" field on "Models_Info_Pane" wizard
+ Then click on "Apply_Button" element on "Models_Info_Pane" wizard
+ Then click on "Apply_Changes_Button" element on "Models_Info_Pane" wizard
+ And wait load page
+ Then click on "Table_FilterBy_Button" element on "Models" wizard
+ Then select "All" option in "Table_Tree_Filter_Dropdown" dropdown on "Artifacts_FilterBy_Popup" wizard
+ Then click on "Apply_Button" element on "Artifacts_FilterBy_Popup" wizard
+ And wait load page
+ When click on cell with row index 2 in "name" column in "Models_Table" table on "Models" wizard
+ And wait load page
+ Then "Version_Tag_Input_Placeholder" element on "Models_Info_Pane" should contains "Click to add" value
\ No newline at end of file
diff --git a/tests/features/projectHomePage.feature b/tests/features/projectHomePage.feature
new file mode 100644
index 000000000..ff0b013bc
--- /dev/null
+++ b/tests/features/projectHomePage.feature
@@ -0,0 +1,615 @@
+Feature: MLRun Project Home Page
+
+ Testcases that verifies functionality on MLRun Project Home Page
+
+ Scenario: MLPH001 - Check all mandatory components on Project Home
+ * set tear-down property "project" created with "automation-test-1002" value
+ * create "automation-test-1002" MLRun Project with code 201
+ Given open url
+ And click on row root with value "automation-test-1002" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ Then verify "Header_Name_Label" element visibility on "Demo_Project" wizard
+ Then verify "Header_Created_Time" element visibility on "Demo_Project" wizard
+ Then verify "Header_Project_Description" element visibility on "Demo_Project" wizard
+ Then verify value should equal "automation-test-1002" in "Header_Name_Label" on "Demo_Project" wizard
+ Then verify value should equal "automation test description" in "Header_Project_Description" on "Demo_Project" wizard
+ Then verify value should equal "Ingest and process data" in "Data_Collection_Header" on "Demo_Project" wizard
+ Then verify value should equal "Project"."Data_Collection_Description" in "Data_Collection_Description" on "Demo_Project" wizard
+ Then verify "Data_Collection_Additional_Actions_Button" element visibility on "Demo_Project" wizard
+ Then verify "Data_Collection_Actions_Table" element visibility on "Demo_Project" wizard
+ Then verify "Data_Collection_Links_Table" element visibility on "Demo_Project" wizard
+ Then verify value should equal "Develop and train model" in "Development_Header" on "Demo_Project" wizard
+ Then verify value should equal "Project"."Development_Description" in "Development_Description" on "Demo_Project" wizard
+ Then verify "Development_Actions_Table" element visibility on "Demo_Project" wizard
+ Then verify "Development_Links_Table" element visibility on "Demo_Project" wizard
+ Then verify value should equal "Deploy and monitor" in "Deployment_Header" on "Demo_Project" wizard
+ Then verify value should equal "Project"."Deployment_Description" in "Deployment_Description" on "Demo_Project" wizard
+ Then verify "Deployment_Actions_Table" element visibility on "Demo_Project" wizard
+ Then verify "Deployment_Links_Table" element visibility on "Demo_Project" wizard
+ Then click on "Data_Collection_Additional_Actions_Button" element on "Demo_Project" wizard
+ Then verify values in "Data_Collection_Actions_Table" table on "Demo_Project" wizard
+ | name |
+ | Create feature set |
+ | Register dataset |
+ | Register artifact |
+ | Create feature vector |
+ Then verify values in "Development_Actions_Table" table on "Demo_Project" wizard
+ | name |
+ | Create function |
+ | Batch run |
+ Then verify values in "Deployment_Actions_Table" table on "Demo_Project" wizard
+ | name |
+ | Create real-time function |
+ | Batch inference |
+ Then verify values in "Data_Collection_Links_Table" table on "Demo_Project" wizard
+ | name |
+ | Feature Sets |
+ | Artifacts |
+ | Datasets |
+ | Feature Vectors |
+ Then verify values in "Development_Links_Table" table on "Demo_Project" wizard
+ | name |
+ | ML Functions |
+ | Jobs |
+ | Models |
+ | Workflows |
+ Then verify values in "Deployment_Links_Table" table on "Demo_Project" wizard
+ | name |
+ | Model Endpoints |
+ | RT Pipelines |
+ | Nuclio Functions |
+ | Monitoring |
+
+ @FAILED_TODO
+ #TODO: click on "name" in "Development_Actions_Table" table on "Demo_Project" - component was changed on project home
+ @demo
+ Scenario: MLPH002 - Verify behaviour on Register Model Popup on Project Home Page
+ Given open url
+ * turn on demo mode
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ When click on "name" in "Development_Actions_Table" table on "Demo_Project" wizard with offset "false"
+ | name |
+ | Register Model |
+ And wait load page
+ Then "Title" element on "Register_Model_Popup" should contains "Register Model" value
+ Then verify "Cross_Cancel_Button" element visibility on "Register_Model_Popup" wizard
+ Then verify "New_File_Name_Input" element visibility on "Register_Model_Popup" wizard
+ Then verify "New_File_Name_Input" on "Register_Model_Popup" wizard should display "Input_Hint"."Artifacts_Names_Unique"
+ Then verify "New_File_Target_Path_Input" element visibility on "Register_Model_Popup" wizard
+ Then verify "New_File_Description_Input" element visibility on "Register_Model_Popup" wizard
+ Then verify "Cancel_Button" element visibility on "Register_Model_Popup" wizard
+ Then verify "Register_Button" element visibility on "Register_Model_Popup" wizard
+ Then click on "Register_Button" element on "Register_Model_Popup" wizard
+ Then verify "New_File_Target_Path_Input" on "Register_Model_Popup" wizard should display warning "Input_Hint"."Input_Field_Require"
+ Then type value " " to "New_File_Name_Input" field on "Register_Model_Popup" wizard
+ Then verify "New_File_Name_Input" on "Register_Model_Popup" wizard should display warning "Input_Hint"."Input_Field_Invalid"
+ Then type value " " to "New_File_Target_Path_Input" field on "Register_Model_Popup" wizard
+ Then verify "New_File_Target_Path_Input" on "Register_Model_Popup" wizard should display warning "Input_Hint"."Input_Field_Invalid"
+ Then type value " " to "New_File_Description_Input" field on "Register_Model_Popup" wizard
+ Then verify "New_File_Description_Input" on "Register_Model_Popup" wizard should display warning "Input_Hint"."Input_Field_Invalid"
+ Then type value "test-model" to "New_File_Name_Input" field on "Register_Model_Popup" wizard
+ Then type value "test-path" to "New_File_Target_Path_Input" field on "Register_Model_Popup" wizard
+ Then type value "test-description" to "New_File_Description_Input" field on "Register_Model_Popup" wizard
+ Then click on "Register_Button" element on "Register_Model_Popup" wizard
+ And wait load page
+ Then verify breadcrumbs "tab" label should be equal "Models" value
+ Then click on cell with value "test-model" in "name" column in "Models_Table" table on "Models" wizard
+ Then "Header" element on "Models_Info_Pane" should contains "test-model" value
+ Then check "test-model" value in "key" column in "Overview_Table" table on "Models_Info_Pane" wizard
+ Then check "latest" value in "tag" column in "Overview_Table" table on "Models_Info_Pane" wizard
+ Then check "test-path" value in "path" column in "Overview_Table" table on "Models_Info_Pane" wizard
+
+ @FAILED_TODO
+ #TODO: click on "name" in "Data_Collection_Actions_Table" table on "Demo_Project" - component was changed on project home
+ @passive
+ @demo
+ Scenario: MLPH003 - Check all mandatory components on Create New Feature Set on Project Home Page
+ Given open url
+ * turn on demo mode
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ When click on "name" in "Data_Collection_Actions_Table" table on "Demo_Project" wizard with offset "false"
+ | name |
+ | Create Features Set |
+ And wait load page
+ Then verify "Cross_Close_Button" element visibility on "New_Feature_Set" wizard
+ Then verify "Feature_Set_Name_Input" element visibility on "New_Feature_Set" wizard
+ Then verify "Version_Input" element visibility on "New_Feature_Set" wizard
+ Then verify "Description_Input" element visibility on "New_Feature_Set" wizard
+ Then verify "Labels_Table" element visibility on "New_Feature_Set" wizard
+ Then verify "Accordion_Header" element visibility in "Data_Source_Accordion" on "New_Feature_Set" wizard
+ Then verify "Collapse_Button" element visibility in "Data_Source_Accordion" on "New_Feature_Set" wizard
+ Then verify "URL_Combobox" element visibility in "Data_Source_Accordion" on "New_Feature_Set" wizard
+ Then verify "Attributes_Input" element visibility in "Data_Source_Accordion" on "New_Feature_Set" wizard
+ Then type value " " to "Attributes_Input" field on "Data_Source_Accordion" on "New_Feature_Set" wizard
+ Then verify "Attributes_Input" element in "Data_Source_Accordion" on "New_Feature_Set" wizard should display warning "Input_Hint"."Input_Field_Invalid"
+ When collapse "Data_Source_Accordion" on "New_Feature_Set" wizard
+ Then verify "Data_Source_Accordion" is collapsed on "New_Feature_Set" wizard
+ Then verify "Accordion_Header" element visibility in "Schema_Accordion" on "New_Feature_Set" wizard
+ Then verify "Collapse_Button" element visibility in "Schema_Accordion" on "New_Feature_Set" wizard
+ Then verify "Entities_Input" element visibility in "Schema_Accordion" on "New_Feature_Set" wizard
+ Then verify "Timestamp_Input" element visibility in "Schema_Accordion" on "New_Feature_Set" wizard
+ When collapse "Schema_Accordion" on "New_Feature_Set" wizard
+ Then verify "Schema_Accordion" is collapsed on "New_Feature_Set" wizard
+ Then verify "Accordion_Header" element visibility in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then verify "Collapse_Button" element visibility in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then verify "Online_Checkbox" element visibility in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then verify "Offline_Checkbox" element visibility in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then verify "External_Offline_Checkbox" element visibility in "Target_Store_Accordion" on "New_Feature_Set" wizard
+ When collapse "Target_Store_Accordion" on "New_Feature_Set" wizard
+ Then verify "Target_Store_Accordion" is collapsed on "New_Feature_Set" wizard
+ Then verify "Access_Key_Checkbox" element visibility on "New_Feature_Set" wizard
+ Then verify "Cancel_Button" element visibility on "New_Feature_Set" wizard
+ Then verify "Save_Button" element visibility on "New_Feature_Set" wizard
+ Then verify "Save_And_Ingest_Button" element visibility on "New_Feature_Set" wizard
+
+ @FAILED_TODO
+ #TODO: "New_File_Target_Path_Input" - component was changed
+ @passive
+ @demo
+ Scenario: MLPH004 - Check all mandatory components on Register Dataset Popup on Project Home Page
+ Given open url
+ * turn on demo mode
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ When click on "name" in "Data_Collection_Actions_Table" table on "Demo_Project" wizard with offset "false"
+ | name |
+ | Register dataset |
+ And wait load page
+ Then "Title" element on "Register_Dataset" should contains "Register Dataset" value
+ Then "Form_Text" component on "Register_Dataset" should be equal "Register_Artifact"."Form_Text"
+ Then "Form_Subtext" component on "Register_Dataset" should contains "Register_Dataset"."Form_Subtext"
+ Then verify "Name_Input" element visibility on "Register_Dataset" wizard
+ Then verify "Name_Input" on "Register_Dataset" wizard should display "Input_Hint"."Dataset_Names_Unique"
+ Then type value " " to "Name_Input" field on "Register_Dataset" wizard
+ Then verify "Name_Input" on "Register_Dataset" wizard should display options "Input_Hint"."Artifact_Name_Hint"
+ Then verify "Name_Input" options rules on form "Register_Dataset" wizard
+ Then verify "Target_Path_Input" element visibility on "Register_Dataset" wizard
+ Then type value " " to "Target_Path_Input" field on "Register_Dataset" wizard
+ Then verify "Target_Path_Input" on "Register_Dataset" wizard should display warning "Input_Hint"."Input_Field_Invalid"
+ Then verify "Description_Input" element visibility on "Register_Dataset" wizard
+ Then type value " " to "Description_Input" field on "Register_Dataset" wizard
+ Then verify "Description_Input" on "Register_Dataset" wizard should display warning "Input_Hint"."Input_Field_Invalid"
+ Then verify "Cancel_Button" element visibility on "Register_Dataset" wizard
+ Then "Cancel_Button" element on "Register_Dataset" should contains "Cancel" value
+ Then verify "Register_Button" element visibility on "Register_Dataset" wizard
+ Then "Register_Button" element on "Register_Dataset" should contains "Register" value
+ Then click on "Register_Button" element on "Register_Dataset" wizard
+ Then verify "Register_Button" element on "Register_Dataset" wizard is disabled
+ Then type value "dataset" to "Name_Input" field on "Register_Dataset" wizard
+ Then type value "target/path" to "Target_Path_Input" field on "Register_Dataset" wizard
+ Then type value "new dataset description" to "Description_Input" field on "Register_Dataset" wizard
+ Then verify "Register_Button" element on "Register_Dataset" wizard is enabled
+ Then click on "Cancel_Button" element on "Register_Dataset" wizard
+ Then verify if "Common_Popup" popup dialog appears
+ Then click on "Cancel_Button" element on "Common_Popup" wizard
+ Then verify if "Register_Dataset" popup dialog appears
+ Then verify "Name_Input" input should contains "dataset" value on "Register_Dataset" wizard
+ Then verify "Target_Path_Input" input should contains "target/path" value on "Register_Dataset" wizard
+ Then verify "Description_Input" input should contains "new dataset description" value on "Register_Dataset" wizard
+ Then click on "Register_Button" element on "Register_Dataset" wizard
+ And wait load page
+ Then verify breadcrumbs "tab" label should be equal "Datasets" value
+ Then click on cell with value "dataset" in "name" column in "Datasets_Table" table on "Datasets" wizard
+ Then "Header" element on "Datasets_Info_Pane" should contains "dataset" value
+ Then check "dataset" value in "key" column in "Overview_Table" table on "Datasets_Info_Pane" wizard
+ Then check "latest" value in "tag" column in "Overview_Table" table on "Datasets_Info_Pane" wizard
+ Then check "target/path" value in "path" column in "Overview_Table" table on "Datasets_Info_Pane" wizard
+
+ @FAILED_TODO
+ #TODO: click on "name" in "Development_Actions_Table" table on "Demo_Project" - component was changed on project home
+ @passive
+ @demo
+ Scenario: MLPH005 - Check all mandatory components on Create ML Function on Project Home Page
+ * set tear-down property "project" created with "automation-test-1003" value
+ * create "automation-test-1003" MLRun Project with code 201
+ Given open url
+ * turn on demo mode
+ And click on row root with value "automation-test-1003" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ When click on "name" in "Development_Actions_Table" table on "Demo_Project" wizard with offset "false"
+ | name |
+ | Create New Function |
+ And wait load page
+ Then verify "Cross_Cancel_Button" element visibility on "Create_ML_Function_Popup" wizard
+ Then verify "New_Function_Name_Input" element visibility on "Create_ML_Function_Popup" wizard
+ Then type value " " to "New_Function_Name_Input" field on "Create_ML_Function_Popup" wizard
+ Then verify "New_Function_Name_Input" on "Create_ML_Function_Popup" wizard should display options "Input_Hint"."Function_Name_Hint"
+ Then verify "New_Function_Name_Input" options rules on "Create_ML_Function_Popup" wizard
+ Then type value " " to "New_Function_Tag_Input" field on "Create_ML_Function_Popup" wizard
+ Then verify "New_Function_Tag_Input" on "Create_ML_Function_Popup" wizard should display options "Input_Hint"."Function_Tag_Hint"
+ Then verify "New_Function_Tag_Input" options rules on "Create_ML_Function_Popup" wizard
+ Then verify "New_Function_Runtime_Dropdown" element visibility on "Create_ML_Function_Popup" wizard
+ Then verify "Cancel_Button" element visibility on "Create_ML_Function_Popup" wizard
+ Then verify "Continue_Button" element visibility on "Create_ML_Function_Popup" wizard
+ And type value "demo-function-02" to "New_Function_Name_Input" field on "Create_ML_Function_Popup" wizard
+
+ @FAILED_TODO
+ #TODO: click on "name" in "Development_Actions_Table" table on "Demo_Project" - component was changed on project home
+ @passive
+ @demo
+ Scenario: MLPH006 - Check all mandatory components on Create New Job on Project Home Page
+ Given open url
+ * turn on demo mode
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ When click on "name" in "Development_Actions_Table" table on "Demo_Project" wizard with offset "false"
+ | name |
+ | Create New Job |
+ And wait load page
+ Then verify "Back_Arrow_Button" element visibility on "Create_Job" wizard
+ Then verify "Create_Job_Header" element visibility on "Create_Job" wizard
+ Then verify "Search_Input" element visibility on "Create_Job" wizard
+
+ @FAILED_TODO
+ #TODO: "New_File_Target_Path_Input" - component was changed
+ @passive
+ @demo
+ Scenario: MLPH007 - Check all mandatory components on Register File Popup on Project Home Page
+ Given open url
+ * turn on demo mode
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ When click on "name" in "Data_Collection_Actions_Table" table on "Demo_Project" wizard with offset "false"
+ | name |
+ | Register artifact |
+ And wait load page
+ Then "Title" element on "Register_File_Popup" should contains "Register Artifact" value
+ Then "Form_Text" component on "Register_File_Popup" should be equal "Register_Artifact"."Form_Text"
+ Then "Form_Subtext" component on "Register_File_Popup" should contains "Register_Artifact"."Form_Subtext"
+ Then verify "Cross_Cancel_Button" element visibility on "Register_File_Popup" wizard
+ Then verify "New_File_Name_Input" element visibility on "Register_File_Popup" wizard
+ Then verify "New_File_Name_Input" on "Register_File_Popup" wizard should display "Input_Hint"."Artifact_Names_Unique"
+ Then type value " " to "New_File_Name_Input" field on "Register_File_Popup" wizard
+ Then verify "New_File_Name_Input" on "Register_File_Popup" wizard should display options "Input_Hint"."Artifact_Name_Hint"
+ Then verify "New_File_Name_Input" options rules on form "Register_File_Popup" wizard
+ Then verify "New_File_Target_Path_Input" element visibility on "Register_File_Popup" wizard
+ Then type value " " to "New_File_Target_Path_Input" field on "Register_File_Popup" wizard
+ Then verify "New_File_Target_Path_Input" on "Register_File_Popup" wizard should display warning "Input_Hint"."Input_Field_Invalid"
+ Then verify "New_File_Description_Input" element visibility on "Register_File_Popup" wizard
+ Then type value " " to "New_File_Description_Input" field on "Register_File_Popup" wizard
+ Then verify "New_File_Description_Input" on "Register_File_Popup" wizard should display warning "Input_Hint"."Input_Field_Invalid"
+ Then verify "New_File_Type_Dropdown" element visibility on "Register_File_Popup" wizard
+ Then verify "New_File_Type_Dropdown" dropdown element on "Register_File_Popup" wizard should contains "Register_Artifact"."Type_Options"
+ Then select "Table" option in "New_File_Type_Dropdown" dropdown on "Register_File_Popup" wizard
+ Then verify "Cancel_Button" element visibility on "Register_File_Popup" wizard
+ Then "Cancel_Button" element on "Register_File_Popup" should contains "Cancel" value
+ Then verify "Register_Button" element visibility on "Register_File_Popup" wizard
+ Then "Register_Button" element on "Register_File_Popup" should contains "Register" value
+ Then click on "Register_Button" element on "Register_File_Popup" wizard
+ Then verify "Register_Button" element on "Register_File_Popup" wizard is disabled
+ Then type value "artifact" to "New_File_Name_Input" field on "Register_File_Popup" wizard
+ Then type value "target/path" to "New_File_Target_Path_Input" field on "Register_File_Popup" wizard
+ Then type value "new artifact description" to "New_File_Description_Input" field on "Register_File_Popup" wizard
+ Then verify "Register_Button" element on "Register_File_Popup" wizard is enabled
+ Then click on "Cancel_Button" element on "Register_File_Popup" wizard
+ Then verify if "Common_Popup" popup dialog appears
+ Then click on "Cancel_Button" element on "Common_Popup" wizard
+ Then verify if "Register_Dataset" popup dialog appears
+ Then verify "New_File_Name_Input" input should contains "artifact" value on "Register_File_Popup" wizard
+ Then verify "New_File_Target_Path_Input" input should contains "target/path" value on "Register_File_Popup" wizard
+ Then verify "New_File_Description_Input" input should contains "new artifact description" value on "Register_File_Popup" wizard
+ Then verify "New_File_Type_Dropdown" dropdown on "Register_File_Popup" wizard selected option value "Table"
+ Then click on "Register_Button" element on "Register_File_Popup" wizard
+ And wait load page
+ Then verify breadcrumbs "tab" label should be equal "Artifacts" value
+ Then click on cell with value "artifact" in "name" column in "Files_Table" table on "Files" wizard
+ Then "Header" element on "Files_Info_Pane" should contains "artifact" value
+ Then check "artifact" value in "key" column in "Overview_Table" table on "Files_Info_Pane" wizard
+ Then check "latest" value in "tag" column in "Overview_Table" table on "Files_Info_Pane" wizard
+ Then check "target/path" value in "path" column in "Overview_Table" table on "Files_Info_Pane" wizard
+
+
+ @FAILED_TODO
+ #TODO: click on "name" in "Data_Collection_Additional_Actions_Table" table on "Demo_Project" - component was changed on project home
+ @passive
+ @demo
+ Scenario: MLPH008 - Check all mandatory components on Create a Feature Vector Popup on Project Home Page
+ Given open url
+ * turn on demo mode
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ Then click on "Data_Collection_Additional_Actions_Button" element on "Demo_Project" wizard
+ And wait load page
+ When click on "name" in "Data_Collection_Additional_Actions_Table" table on "Demo_Project" wizard with offset "false"
+ | name |
+ | Create a Feature Vector |
+ And wait load page
+ Then "Title" element on "Create_Feature_Vector_Popup" should contains "Create feature vector" value
+ Then verify "Cross_Cancel_Button" element visibility on "Create_Feature_Vector_Popup" wizard
+ Then verify "Name_Input" element visibility on "Create_Feature_Vector_Popup" wizard
+ Then type value " " to "Name_Input" field on "Create_Feature_Vector_Popup" wizard
+ Then verify "Name_Input" options rules on "Create_Feature_Vector_Popup" wizard
+ Then verify "Tag_Input" element visibility on "Create_Feature_Vector_Popup" wizard
+ Then verify "Description_Input" element visibility on "Create_Feature_Vector_Popup" wizard
+ Then verify "Labels_Table" element visibility on "Create_Feature_Vector_Popup" wizard
+
+ @passive
+ @demo
+ Scenario: MLPH009 - Check all mandatory components on Feature Set tab on Project Home Page
+ Given open url
+ * turn on demo mode
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ When click on "name" in "Data_Collection_Links_Table" table on "Demo_Project" wizard with offset "false"
+ | name |
+ | Feature Sets |
+ And wait load page
+ Then verify breadcrumbs "tab" label should be equal "Feature Store" value
+ Then verify "Feature_Store_Tab_Selector" on "Feature_Store_Feature_Sets_Tab" wizard should contains "Feature_Store"."Tab_List"
+ Then verify "Feature Sets" tab is active in "Feature_Store_Tab_Selector" on "Feature_Store_Feature_Sets_Tab" wizard
+ Then verify "Table_Refresh_Button" element visibility on "Feature_Store_Feature_Sets_Tab" wizard
+ Then verify "Table_Tag_Filter_Dropdown" element visibility on "Feature_Store_Feature_Sets_Tab" wizard
+ Then verify "Table_Tag_Filter_Dropdown" dropdown element on "Feature_Store_Feature_Sets_Tab" wizard should contains "Dropdown_Options"."Tag_Filer_Options"
+ Then type value " " to "Table_Name_Filter_Input" field on "Feature_Store_Feature_Sets_Tab" wizard
+ Then verify "Table_Name_Filter_Input" on "Feature_Store_Feature_Sets_Tab" wizard should display warning "Input_Hint"."Input_Field_Invalid"
+ Then verify "Table_Label_Filter_Input" element visibility on "Feature_Store_Feature_Sets_Tab" wizard
+ Then type value " " to "Table_Label_Filter_Input" field on "Feature_Store_Feature_Sets_Tab" wizard
+ Then verify "Table_Label_Filter_Input" on "Feature_Store_Feature_Sets_Tab" wizard should display warning "Input_Hint"."Input_Field_Invalid"
+ Then verify "Feature_Sets_Table" element visibility on "Feature_Store_Feature_Sets_Tab" wizard
+ Then verify "Feature_Store_Tab_Selector" element visibility on "Feature_Store_Feature_Sets_Tab" wizard
+ Then verify "Create_Set_Button" element visibility on "Feature_Store_Feature_Sets_Tab" wizard
+ Then "Create_Set_Button" element on "Feature_Store_Feature_Sets_Tab" should contains "Create Set" value
+
+ @passive
+ Scenario: MLPH010 - Check all mandatory components on Files tab on Project Home Page
+ Given open url
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ When click on "name" in "Data_Collection_Links_Table" table on "Demo_Project" wizard with offset "false"
+ | name |
+ | Artifacts |
+ And wait load page
+ Then verify breadcrumbs "tab" label should be equal "Artifacts" value
+ Then verify "Table_Name_Filter_Input" element visibility on "Files" wizard
+ Then click on "Table_FilterBy_Button" element on "Files" wizard
+ Then verify "Table_Label_Filter_Input" element visibility on "Artifacts_FilterBy_Popup" wizard
+ Then verify "Table_Tree_Filter_Dropdown" element visibility on "Artifacts_FilterBy_Popup" wizard
+ Then verify "Show_Iterations_Checkbox" element visibility on "Artifacts_FilterBy_Popup" wizard
+ Then verify "Table_Refresh_Button" element visibility on "Files" wizard
+ Then verify "Files_Table" element visibility on "Files" wizard
+ Then verify "Register_File_Button" element visibility on "Files" wizard
+ Then "Register_File_Button" element on "Files" should contains "Register Artifact" value
+
+ @passive
+ Scenario: MLPH011 - Check all mandatory components on Datasets tab on Project Home Page
+ Given open url
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ When click on "name" in "Data_Collection_Links_Table" table on "Demo_Project" wizard with offset "false"
+ | name |
+ | Datasets |
+ And wait load page
+ Then verify breadcrumbs "tab" label should be equal "Datasets" value
+ Then verify "Register_Dataset_Button" element visibility on "Datasets" wizard
+ Then "Register_Dataset_Button" element on "Datasets" should contains "Register Dataset" value
+ Then verify "Table_Name_Filter_Input" element visibility on "Datasets" wizard
+ Then click on "Table_FilterBy_Button" element on "Datasets" wizard
+ Then verify "Table_Label_Filter_Input" element visibility on "Artifacts_FilterBy_Popup" wizard
+ Then verify "Table_Tree_Filter_Dropdown" element visibility on "Artifacts_FilterBy_Popup" wizard
+ Then verify "Table_Tree_Filter_Dropdown" dropdown element on "Artifacts_FilterBy_Popup" wizard should contains "Dropdown_Options"."Tag_Filer_Options"
+ Then verify "Table_Refresh_Button" element visibility on "Datasets" wizard
+
+ @passive
+ Scenario: MLPH012 - Check all mandatory components on Feature Vectors tab on Project Home Page
+ Given open url
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ When click on "name" in "Data_Collection_Links_Table" table on "Demo_Project" wizard with offset "false"
+ | name |
+ | Feature Vectors |
+ And wait load page
+ Then verify "Table_Name_Filter_Input" element visibility on "Feature_Store_Features_Vectors_Tab" wizard
+ Then verify "Table_Label_Filter_Input" element visibility on "Feature_Store_Features_Vectors_Tab" wizard
+ Then verify "Table_Tag_Filter_Dropdown" element visibility on "Feature_Store_Features_Vectors_Tab" wizard
+ Then verify "Table_Tag_Filter_Dropdown" dropdown element on "Feature_Store_Features_Vectors_Tab" wizard should contains "Dropdown_Options"."Tag_Filer_Options"
+ Then verify "Table_Refresh_Button" element visibility on "Feature_Store_Features_Vectors_Tab" wizard
+
+ @passive
+ Scenario: MLPH013 - Check all mandatory components on ML Functions tab on Project Home Page
+ Given open url
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ When click on "name" in "Development_Links_Table" table on "Demo_Project" wizard with offset "false"
+ | name |
+ | ML Functions |
+ And wait load page
+ Then verify "Table_Name_Filter_Input" element visibility on "ML_Functions" wizard
+ Then verify "Show_Untagged_Functions_Checkbox" element visibility on "ML_Functions" wizard
+ Then verify "New_Function_Button" element visibility on "ML_Functions" wizard
+ Then "New_Function_Button" element on "ML_Functions" should contains "New" value
+ Then verify "Table_Refresh_Button" element visibility on "ML_Functions" wizard
+ Then verify "Table_Expand_Rows_Button" element visibility on "ML_Functions" wizard
+
+ @passive
+ @demo
+ Scenario: MLPH014 - Check all mandatory components on Jobs tab on Project Home Page
+ Given open url
+ * turn on demo mode
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ When click on "name" in "Development_Links_Table" table on "Demo_Project" wizard with offset "false"
+ | name |
+ | Jobs |
+ And wait load page
+ Then verify "Jobs_Tab_Selector" on "Jobs_Monitor_Tab" wizard should contains "Jobs_And_Workflows"."Tab_List"
+ Then verify "Monitor Jobs" tab is active in "Jobs_Tab_Selector" on "Jobs_Monitor_Tab" wizard
+ Then verify "New_Job_Button" element visibility on "Jobs_Monitor_Tab" wizard
+ Then "New_Job_Button" element on "Jobs_Monitor_Tab" should contains "Batch Run" value
+ Then verify "Resource_Monitoring_Button" element visibility on "Jobs_Monitor_Tab" wizard
+ Then verify "Table_Refresh_Button" element visibility on "Jobs_Monitor_Tab" wizard
+ Then verify "Status_Filter_Dropdown" element visibility on "Jobs_Monitor_Tab" wizard
+ Then verify "Status_Filter_Dropdown" dropdown element on "Jobs_Monitor_Tab" wizard should contains "Dropdown_Options"."Status_Filter_Options"
+
+ @passive
+ @demo
+ #TODO: Register_Model_Button - in demo mode
+ Scenario: MLPH015 - Check all mandatory components on Models tab on Project Home Page
+ Given open url
+ * turn on demo mode
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ When click on "name" in "Development_Links_Table" table on "Demo_Project" wizard with offset "false"
+ | name |
+ | Models |
+ And wait load page
+ Then verify "Models_Tab_Selector" on "Models" wizard should contains "Models"."Tab_List"
+ Then verify "Table_Name_Filter_Input" element visibility on "Models" wizard
+ Then click on "Table_FilterBy_Button" element on "Models" wizard
+ Then verify "Table_Label_Filter_Input" element visibility on "Artifacts_FilterBy_Popup" wizard
+ Then verify "Table_Tree_Filter_Dropdown" element visibility on "Artifacts_FilterBy_Popup" wizard
+ Then verify "Show_Iterations_Checkbox" element visibility on "Artifacts_FilterBy_Popup" wizard
+ Then verify "Table_Refresh_Button" element visibility on "Models" wizard
+ Then verify "Models_Table" element visibility on "Models" wizard
+ Then verify "Register_Model_Button" element visibility on "Models" wizard
+ Then "Register_Model_Button" element on "Models" should contains "Register Model" value
+
+ @passive
+ Scenario: MLPH016 - Check all mandatory components on Monitor Workflows tab on Project Home Page
+ Given open url
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ When click on "name" in "Development_Links_Table" table on "Demo_Project" wizard with offset "false"
+ | name |
+ | Workflows |
+ And wait load page
+ Then verify "Monitor Workflows" tab is active in "Jobs_Tab_Selector" on "Jobs_Monitor_Tab" wizard
+
+ @passive
+ Scenario: MLPH017 - Check all mandatory components on Models Endpoint tab on Project Home Page
+ Given open url
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ When click on "name" in "Deployment_Links_Table" table on "Demo_Project" wizard with offset "false"
+ | name |
+ | Model Endpoints |
+ And wait load page
+ Then verify "Model Endpoints" tab is active in "Models_Tab_Selector" on "Models" wizard
+
+ @passive
+ Scenario: MLPH018 - Check all mandatory components on Real-Time Piplines tab on Project Home Page
+ Given open url
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ When click on "name" in "Deployment_Links_Table" table on "Demo_Project" wizard with offset "false"
+ | name |
+ | RT Pipelines |
+ And wait load page
+ Then verify "Real-Time Pipelines" tab is active in "Models_Tab_Selector" on "Models" wizard
+
+ @passive
+ Scenario: MLPH019 - Check all mandatory components on Monitoring tab on Project Home Page
+ Given open url
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ When click on "name" in "Deployment_Links_Table" table on "Demo_Project" wizard with offset "false"
+ | name |
+ | Monitoring |
+ And wait load page
+ Then verify breadcrumbs "project" label should be equal "default" value
+ Then verify "Create_New" element visibility on "Project" wizard
+ Then verify "Refresh_Button" element visibility on "Project" wizard
+ Then verify "Dashboard_Realtime_Functions_Table" element visibility on "Project" wizard
+ Then verify "Jobs_And_Workflows" element visibility on "Project" wizard
+ Then verify "Mono_Values_Cards" element visibility on "Project" wizard
+ Then verify "Jobs_Info_Card_Statistics" element visibility on "Project" wizard
+ Then verify "Real_Time_Functions_Card_Statistics" element visibility on "Project" wizard
+ When hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ Then verify "General_Info_Quick_Links" element visibility on "commonPagesHeader" wizard
+
+ Scenario: MLPH020 - Check all mandatory components on Batch inference in Advanced section
+ Given open url
+ And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ Then verify "Deployment_Actions_Table" element visibility on "Demo_Project" wizard
+ Then verify values in "Deployment_Actions_Table" table on "Demo_Project" wizard
+ | name |
+ | Create real-time function |
+ | Batch inference |
+ When click on "name" in "Deployment_Actions_Table" table on "Demo_Project" wizard with offset "false"
+ | name |
+ | Batch inference |
+ And wait load page
+ Then verify "Next_Button" element on "Batch_Inference" wizard is enabled
+ Then verify "Back_Button" element on "Batch_Inference" wizard is disabled
+ Then "Next_Button" element on "Batch_Inference" should contains "Next" value
+ Then "Back_Button" element on "Batch_Inference" should contains "Back" value
+ And click on "Next_Button" element on "Batch_Inference" wizard
+ And click on "Next_Button" element on "Batch_Inference" wizard
+ And click on "Next_Button" element on "Batch_Inference" wizard
+ And click on "Next_Button" element on "Batch_Inference" wizard
+ Then verify "Next_Button" element on "Batch_Inference" wizard is enabled
+ Then verify "Back_Button" element on "Batch_Inference" wizard is enabled
+ Then "Next_Button" element on "Batch_Inference" should contains "Infer now" value
+ Then "Back_Button" element on "Batch_Inference" should contains "Schedule Infer" value
+ Then verify "Accordion_Header" element visibility in "Advanced_Accordion" on "Batch_Inference" wizard
+ Then "Accordion_Header" element in "Advanced_Accordion" on "Batch_Inference" should contains "Advanced" value
+ Then verify "Accordion_Subheader" element visibility in "Advanced_Accordion" on "Batch_Inference" wizard
+ Then "Accordion_Subheader" element in "Advanced_Accordion" on "Batch_Inference" should contains "Environment variables" value
+ Then verify "Advanced_Environment_Variables_Table" element visibility on "Batch_Inference" wizard
+ When add data to "Advanced_Environment_Variables_Table" table on "Batch_Inference" wizard with several inputs
+ | name_input | type_dropdown | value_input | value_input_key |
+ | name1 | Value | value1 | |
+ | name2 | Secret | sectretName1 | sectretKey1 |
+ | name3 | Secret | sectretName2 | sectretKey2 |
+ | name4 | Value | value2 | |
+ | name5 | Secret | sectretName3 | sectretKey3 |
+ | name6 | Value | value3 | |
+ | name7 | Secret | sectretName4 | sectretKey4 |
+ | name8 | Value | value4 | |
+ Then verify data in "Advanced_Environment_Variables_Table" table on "Batch_Inference" wizard
+ | name_verify | type_dropdown_verify | value_verify |
+ | name1 | value | value1 |
+ | name2 | secret | sectretName1:sectretKey1 |
+ | name3 | secret | sectretName2:sectretKey2 |
+ | name4 | value | value2 |
+ | name5 | secret | sectretName3:sectretKey3 |
+ | name6 | value | value3 |
+ | name7 | secret | sectretName4:sectretKey4 |
+ | name8 | value | value4 |
+ When click on "delete_btn" in "Advanced_Environment_Variables_Table" table on "Batch_Inference" wizard with offset "false"
+ | name_verify |
+ | name1 |
+ | name3 |
+ | name6 |
+ Then verify data in "Advanced_Environment_Variables_Table" table on "Batch_Inference" wizard
+ | name_verify | type_dropdown_verify | value_verify |
+ | name2 | secret | sectretName1:sectretKey1 |
+ | name4 | value | value2 |
+ | name5 | secret | sectretName3:sectretKey3 |
+ | name7 | secret | sectretName4:sectretKey4 |
+ | name8 | value | value4 |
+ Then edit 1 row in "Advanced_Environment_Variables_Table" key-value table on "Batch_Inference" wizard
+ | name_input | value_input |
+ | edited | edited |
+ Then verify data in "Advanced_Environment_Variables_Table" table on "Batch_Inference" wizard
+ | name_verify | type_dropdown_verify | value_verify |
+ | name2edited | secret | sectretName1edited:sectretKey1 |
+ | name4 | value | value2 |
+ | name5 | secret | sectretName3:sectretKey3 |
+ | name7 | secret | sectretName4:sectretKey4 |
+ | name8 | value | value4 |
+ Then edit 5 row in "Advanced_Environment_Variables_Table" key-value table on "Batch_Inference" wizard
+ | name_input | value_input |
+ | edited | edited |
+ Then verify data in "Advanced_Environment_Variables_Table" table on "Batch_Inference" wizard
+ | name_verify | type_dropdown_verify | value_verify |
+ | name2edited | secret | sectretName1edited:sectretKey1 |
+ | name4 | value | value2 |
+ | name5 | secret | sectretName3:sectretKey3 |
+ | name7 | secret | sectretName4:sectretKey4 |
+ | name8edited | value | value4edited |
+ Then verify "Default_Input_Path_Input" element visibility in "Advanced_Accordion" on "Batch_Inference" wizard
+ Then type value "test" to "Default_Input_Path_Input" field on "Advanced_Accordion" on "Batch_Inference" wizard
+ Then verify "Default_Artifact_Path_Input" element visibility in "Advanced_Accordion" on "Batch_Inference" wizard
+ Then "Default_Artifact_Path_Input" element in "Advanced_Accordion" on "Batch_Inference" should contains "v3io:///projects/{{run.project}}/artifacts/{{run.uid}}" attribute value
+ Then verify "Access_Key_Checkbox" element visibility on "Batch_Inference" wizard
+ Then uncheck "Access_Key_Checkbox" element on "Batch_Inference" wizard
+ Then verify "Access_Key_Input" element visibility on "Batch_Inference" wizard
+ Then type value " " to "Access_Key_Input" field on "Batch_Inference" wizard
+ Then verify "Access_Key_Input" on "Batch_Inference" wizard should display warning "Input_Hint"."Input_Field_Invalid"
+ Then type value "" to "Access_Key_Input" field on "Batch_Inference" wizard
+ Then verify "Access_Key_Input" on "Batch_Inference" wizard should display warning "Input_Hint"."Input_Field_Require"
+
+
diff --git a/tests/features/projectPage.feature b/tests/features/projectPage.feature
index bc00538e0..8c049f01b 100644
--- a/tests/features/projectPage.feature
+++ b/tests/features/projectPage.feature
@@ -24,7 +24,7 @@ Feature: MLRun Project Page
Then verify "Real_Time_Functions_Card_Statistics" element visibility on "Project" wizard
When hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
Then verify "General_Info_Quick_Links" element visibility on "commonPagesHeader" wizard
-
+ #TODO: Navigation_Bar previous implementation
@passive
@sanity
Scenario: Check all mandatory components on Navigation Bar
@@ -113,65 +113,6 @@ Feature: MLRun Project Page
And wait load page
Then "Navigation_Bar" on "commonPagesHeader" wizard should be "pinned"
- @passive
- @sanity
- Scenario: Check all mandatory components on Project Home
- * set tear-down property "project" created with "automation-test-1002" value
- * create "automation-test-1002" MLRun Project with code 201
- Given open url
- And click on row root with value "automation-test-1002" in "name" column in "Projects_Table" table on "Projects" wizard
- And wait load page
- Then verify "Header_Name_Label" element visibility on "Demo_Project" wizard
- Then verify "Header_Created_Time" element visibility on "Demo_Project" wizard
- Then verify "Header_Project_Description" element visibility on "Demo_Project" wizard
- Then verify value should equal "automation-test-1002" in "Header_Name_Label" on "Demo_Project" wizard
- Then verify value should equal "automation test description" in "Header_Project_Description" on "Demo_Project" wizard
- Then verify value should equal "Ingest and process data" in "Data_Collection_Header" on "Demo_Project" wizard
- Then verify value should equal "Project"."Data_Collection_Description" in "Data_Collection_Description" on "Demo_Project" wizard
- Then verify "Data_Collection_Additional_Actions_Button" element visibility on "Demo_Project" wizard
- Then verify "Data_Collection_Actions_Table" element visibility on "Demo_Project" wizard
- Then verify "Data_Collection_Links_Table" element visibility on "Demo_Project" wizard
- Then verify value should equal "Develop and train model" in "Development_Header" on "Demo_Project" wizard
- Then verify value should equal "Project"."Development_Description" in "Development_Description" on "Demo_Project" wizard
- Then verify "Development_Actions_Table" element visibility on "Demo_Project" wizard
- Then verify "Development_Links_Table" element visibility on "Demo_Project" wizard
- Then verify value should equal "Deploy and monitor" in "Deployment_Header" on "Demo_Project" wizard
- Then verify value should equal "Project"."Deployment_Description" in "Deployment_Description" on "Demo_Project" wizard
- Then verify "Deployment_Actions_Table" element visibility on "Demo_Project" wizard
- Then verify "Deployment_Links_Table" element visibility on "Demo_Project" wizard
- Then click on "Data_Collection_Additional_Actions_Button" element on "Demo_Project" wizard
- Then verify values in "Data_Collection_Actions_Table" table on "Demo_Project" wizard
- | name |
- | Create feature set |
- | Register dataset |
- | Register artifact |
- | Create feature vector |
- Then verify values in "Development_Actions_Table" table on "Demo_Project" wizard
- | name |
- | Create batch function |
- | Create job |
- Then verify values in "Deployment_Actions_Table" table on "Demo_Project" wizard
- | name |
- | Create real-time function |
- Then verify values in "Data_Collection_Links_Table" table on "Demo_Project" wizard
- | name |
- | Feature Sets |
- | Artifacts |
- | Datasets |
- | Feature Vectors |
- Then verify values in "Development_Links_Table" table on "Demo_Project" wizard
- | name |
- | ML Functions |
- | Jobs |
- | Models |
- | Workflows |
- Then verify values in "Deployment_Links_Table" table on "Demo_Project" wizard
- | name |
- | Model Endpoints |
- | RT Pipelines |
- | Nuclio Functions |
- | Monitoring |
-
@passive
Scenario: Check MLRun logo redirection
Given open url
@@ -234,7 +175,7 @@ Feature: MLRun Project Page
Then verify "New_File_Type_Dropdown" dropdown on "Register_File_Popup" wizard selected option value "Table"
@FAILED_TODO
- #TODO: Register_Model hidden till 5.1, running in demo mode
+ #TODO: Register_Model hidden till 1.5, running in demo mode
#TODO: Bug - on 'Project Home' also hidden in demo mode
@passive
Scenario: Check all mandatory components on Register Model Popup
@@ -282,7 +223,7 @@ Feature: MLRun Project Page
| key2\n:\nvalue2 |
@FAILED_TODO
- #TODO: Register_Model hidden till 5.1, running in demo mode
+ #TODO: Register_Model hidden till 1.5, running in demo mode
#TODO: 'New_File_Target_Path_Input' was redesigned, need case rewrite (also affects on 'Register_Button' anable)
@passive
Scenario: Check all mandatory components on Register Dataset Popup
@@ -327,7 +268,7 @@ Feature: MLRun Project Page
Then verify "Name_Input" input should contains "dataset" value on "Register_Dataset" wizard
Then verify "Target_Path_Input" input should contains "target/path" value on "Register_Dataset" wizard
Then verify "Description_Input" input should contains "new dataset description" value on "Register_Dataset" wizard
-
+ #TODO: Register_Model hidden till 1.5, running in demo mode
@passive
Scenario: Check all mandatory components on Create New Job
Given open url
@@ -373,7 +314,7 @@ Feature: MLRun Project Page
Then verify "Access_Key_Input" element visibility on "New_JobTemplate_Edit" wizard
Then verify "Schedule_For_Later_Button" element visibility on "New_JobTemplate_Edit" wizard
Then verify "Run_Now_Button" element visibility on "New_JobTemplate_Edit" wizard
-
+ #TODO: Register_Model hidden till 1.5, running in demo mode
@passive
Scenario: Check all mandatory components on Create ML Function
Given open url
@@ -434,6 +375,7 @@ Feature: MLRun Project Page
@passive
@demo
#TODO: "Serving" option in "New_Function_Runtime_Dropdown" exist only in demo mode
+ #TODO: Register_Model hidden till 1.5, running in demo mode
Scenario: Check all mandatory components on Create ML Function on Demo mode
Given open url
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
@@ -500,7 +442,7 @@ Feature: MLRun Project Page
Then verify "Deploy_Button" element visibility on "New_Function" wizard
@FAILED_TODO
- #TODO: verify "Create_New" element visibility on "Project" doesn't contain 'Register_Model' - Register_Model hidden till 5.1, running in demo mode
+ #TODO: verify "Create_New" element visibility on "Project" doesn't contain 'Register_Model' - Register_Model hidden till 1.5, running in demo mode
@passive
Scenario: Check all mandatory components on Create New Feature Set
Given open url
@@ -543,11 +485,12 @@ Feature: MLRun Project Page
Then verify "Save_Button" element visibility on "New_Feature_Set" wizard
Then verify "Save_And_Ingest_Button" element visibility on "New_Feature_Set" wizard
- @FAILED_TODO
- #TODO: verify "Table_Labels_Filter_Input" element visibility - block element is changed, hidden
@passive
+ @demo
+ #TODO: Register_Model_Button - in demo mode
Scenario: Check Project Counter redirection to Models tab
Given open url
+ * turn on demo mode
And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
And wait load page
And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
@@ -556,9 +499,10 @@ Feature: MLRun Project Page
Then click on cell with value "Models" in "name" column in "Mono_Values_Cards" table on "Project" wizard
And wait load page
Then verify "Table_Name_Filter_Input" element visibility on "Models" wizard
- Then verify "Table_Labels_Filter_Input" element visibility on "Models" wizard
- Then verify "Table_Tree_Filter_Dropdown" element visibility on "Models" wizard
- Then verify "Show_Iterations_Checkbox" element visibility on "Models" wizard
+ Then click on "Table_FilterBy_Button" element on "Models" wizard
+ Then verify "Table_Label_Filter_Input" element visibility on "Artifacts_FilterBy_Popup" wizard
+ Then verify "Table_Tree_Filter_Dropdown" element visibility on "Artifacts_FilterBy_Popup" wizard
+ Then verify "Show_Iterations_Checkbox" element visibility on "Artifacts_FilterBy_Popup" wizard
Then verify "Table_Refresh_Button" element visibility on "Models" wizard
Then verify "Models_Table" element visibility on "Models" wizard
Then verify "Register_Model_Button" element visibility on "Models" wizard
@@ -588,8 +532,6 @@ Feature: MLRun Project Page
Then verify "Create_Set_Button" element visibility on "Feature_Store_Feature_Sets_Tab" wizard
Then "Create_Set_Button" element on "Feature_Store_Feature_Sets_Tab" should contains "Create Set" value
- @FAILED_TODO
- #TODO: verify "Table_Labels_Filter_Input" element visibility - block element is changed, hidden
@passive
Scenario: Check Project Counter redirection to Files tab
Given open url
@@ -601,9 +543,10 @@ Feature: MLRun Project Page
Then click on cell with value "Artifacts" in "name" column in "Mono_Values_Cards" table on "Project" wizard
And wait load page
Then verify "Table_Name_Filter_Input" element visibility on "Files" wizard
- Then verify "Table_Label_Filter_Input" element visibility on "Files" wizard
- Then verify "Table_Tree_Filter_Dropdown" element visibility on "Files" wizard
- Then verify "Show_Iterations_Checkbox" element visibility on "Files" wizard
+ Then click on "Table_FilterBy_Button" element on "Files" wizard
+ Then verify "Table_Label_Filter_Input" element visibility on "Artifacts_FilterBy_Popup" wizard
+ Then verify "Table_Tree_Filter_Dropdown" element visibility on "Artifacts_FilterBy_Popup" wizard
+ Then verify "Show_Iterations_Checkbox" element visibility on "Artifacts_FilterBy_Popup" wizard
Then verify "Table_Refresh_Button" element visibility on "Files" wizard
Then verify "Files_Table" element visibility on "Files" wizard
Then verify "Register_File_Button" element visibility on "Files" wizard
@@ -669,481 +612,6 @@ Feature: MLRun Project Page
Then select "tab" with "Artifacts" value in breadcrumbs menu
And wait load page
- @FAILED_TODO
- #TODO: click on "name" in "Development_Actions_Table" table on "Demo_Project" - component was changed on project home
- @passive
- @demo
- Scenario: Check all mandatory components on Create ML Function on Demo mode from Demo Page
- * set tear-down property "project" created with "automation-test-1003" value
- * create "automation-test-1003" MLRun Project with code 201
- Given open url
- * turn on demo mode
- And click on row root with value "automation-test-1003" in "name" column in "Projects_Table" table on "Projects" wizard
- And wait load page
- When click on "name" in "Development_Actions_Table" table on "Demo_Project" wizard with offset "false"
- | name |
- | Create New Function |
- And wait load page
- Then verify "Cross_Cancel_Button" element visibility on "Create_ML_Function_Popup" wizard
- Then verify "New_Function_Name_Input" element visibility on "Create_ML_Function_Popup" wizard
- Then type value " " to "New_Function_Name_Input" field on "Create_ML_Function_Popup" wizard
- Then verify "New_Function_Name_Input" on "Create_ML_Function_Popup" wizard should display options "Input_Hint"."Function_Name_Hint"
- Then verify "New_Function_Name_Input" options rules on "Create_ML_Function_Popup" wizard
- Then type value " " to "New_Function_Tag_Input" field on "Create_ML_Function_Popup" wizard
- Then verify "New_Function_Tag_Input" on "Create_ML_Function_Popup" wizard should display options "Input_Hint"."Function_Tag_Hint"
- Then verify "New_Function_Tag_Input" options rules on "Create_ML_Function_Popup" wizard
- Then verify "New_Function_Runtime_Dropdown" element visibility on "Create_ML_Function_Popup" wizard
- Then verify "Cancel_Button" element visibility on "Create_ML_Function_Popup" wizard
- Then verify "Continue_Button" element visibility on "Create_ML_Function_Popup" wizard
- And type value "demo-function-02" to "New_Function_Name_Input" field on "Create_ML_Function_Popup" wizard
-
- @FAILED_TODO
- #TODO: click on "name" in "Development_Actions_Table" table on "Demo_Project" - component was changed on project home
- @passive
- @demo
- Scenario: Check all mandatory components on Create New Job on Demo mode from Demo Page
- Given open url
- * turn on demo mode
- And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
- And wait load page
- When click on "name" in "Development_Actions_Table" table on "Demo_Project" wizard with offset "false"
- | name |
- | Create New Job |
- And wait load page
- Then verify "Back_Arrow_Button" element visibility on "Create_Job" wizard
- Then verify "Create_Job_Header" element visibility on "Create_Job" wizard
- Then verify "Search_Input" element visibility on "Create_Job" wizard
-
- @FAILED_TODO
- #TODO: click on "name" in "Development_Actions_Table" table on "Demo_Project" - component was changed on project home
- @demo
- Scenario: Verify behaviour on Register Model Popup on Demo mode from Demo Page
- Given open url
- * turn on demo mode
- And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
- And wait load page
- When click on "name" in "Development_Actions_Table" table on "Demo_Project" wizard with offset "false"
- | name |
- | Register Model |
- And wait load page
- Then "Title" element on "Register_Model_Popup" should contains "Register Model" value
- Then verify "Cross_Cancel_Button" element visibility on "Register_Model_Popup" wizard
- Then verify "New_File_Name_Input" element visibility on "Register_Model_Popup" wizard
- Then verify "New_File_Name_Input" on "Register_Model_Popup" wizard should display "Input_Hint"."Artifacts_Names_Unique"
- Then verify "New_File_Target_Path_Input" element visibility on "Register_Model_Popup" wizard
- Then verify "New_File_Description_Input" element visibility on "Register_Model_Popup" wizard
- Then verify "Cancel_Button" element visibility on "Register_Model_Popup" wizard
- Then verify "Register_Button" element visibility on "Register_Model_Popup" wizard
- Then click on "Register_Button" element on "Register_Model_Popup" wizard
- Then verify "New_File_Target_Path_Input" on "Register_Model_Popup" wizard should display warning "Input_Hint"."Input_Field_Require"
- Then type value " " to "New_File_Name_Input" field on "Register_Model_Popup" wizard
- Then verify "New_File_Name_Input" on "Register_Model_Popup" wizard should display warning "Input_Hint"."Input_Field_Invalid"
- Then type value " " to "New_File_Target_Path_Input" field on "Register_Model_Popup" wizard
- Then verify "New_File_Target_Path_Input" on "Register_Model_Popup" wizard should display warning "Input_Hint"."Input_Field_Invalid"
- Then type value " " to "New_File_Description_Input" field on "Register_Model_Popup" wizard
- Then verify "New_File_Description_Input" on "Register_Model_Popup" wizard should display warning "Input_Hint"."Input_Field_Invalid"
- Then type value "test-model" to "New_File_Name_Input" field on "Register_Model_Popup" wizard
- Then type value "test-path" to "New_File_Target_Path_Input" field on "Register_Model_Popup" wizard
- Then type value "test-description" to "New_File_Description_Input" field on "Register_Model_Popup" wizard
- Then click on "Register_Button" element on "Register_Model_Popup" wizard
- And wait load page
- Then verify breadcrumbs "tab" label should be equal "Models" value
- Then click on cell with value "test-model" in "name" column in "Models_Table" table on "Models" wizard
- Then "Header" element on "Models_Info_Pane" should contains "test-model" value
- Then check "test-model" value in "key" column in "Overview_Table" table on "Models_Info_Pane" wizard
- Then check "latest" value in "tag" column in "Overview_Table" table on "Models_Info_Pane" wizard
- Then check "test-path" value in "path" column in "Overview_Table" table on "Models_Info_Pane" wizard
-
- @FAILED_TODO
- #TODO: click on "name" in "Data_Collection_Actions_Table" table on "Demo_Project" - component was changed on project home
- @passive
- @demo
- Scenario: Check all mandatory components on Create New Feature Set on Demo mode from Demo Page
- Given open url
- * turn on demo mode
- And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
- And wait load page
- When click on "name" in "Data_Collection_Actions_Table" table on "Demo_Project" wizard with offset "false"
- | name |
- | Create Features Set |
- And wait load page
- Then verify "Cross_Close_Button" element visibility on "New_Feature_Set" wizard
- Then verify "Feature_Set_Name_Input" element visibility on "New_Feature_Set" wizard
- Then verify "Version_Input" element visibility on "New_Feature_Set" wizard
- Then verify "Description_Input" element visibility on "New_Feature_Set" wizard
- Then verify "Labels_Table" element visibility on "New_Feature_Set" wizard
- Then verify "Accordion_Header" element visibility in "Data_Source_Accordion" on "New_Feature_Set" wizard
- Then verify "Collapse_Button" element visibility in "Data_Source_Accordion" on "New_Feature_Set" wizard
- Then verify "URL_Combobox" element visibility in "Data_Source_Accordion" on "New_Feature_Set" wizard
- Then verify "Attributes_Input" element visibility in "Data_Source_Accordion" on "New_Feature_Set" wizard
- Then type value " " to "Attributes_Input" field on "Data_Source_Accordion" on "New_Feature_Set" wizard
- Then verify "Attributes_Input" element in "Data_Source_Accordion" on "New_Feature_Set" wizard should display warning "Input_Hint"."Input_Field_Invalid"
- When collapse "Data_Source_Accordion" on "New_Feature_Set" wizard
- Then verify "Data_Source_Accordion" is collapsed on "New_Feature_Set" wizard
- Then verify "Accordion_Header" element visibility in "Schema_Accordion" on "New_Feature_Set" wizard
- Then verify "Collapse_Button" element visibility in "Schema_Accordion" on "New_Feature_Set" wizard
- Then verify "Entities_Input" element visibility in "Schema_Accordion" on "New_Feature_Set" wizard
- Then verify "Timestamp_Input" element visibility in "Schema_Accordion" on "New_Feature_Set" wizard
- When collapse "Schema_Accordion" on "New_Feature_Set" wizard
- Then verify "Schema_Accordion" is collapsed on "New_Feature_Set" wizard
- Then verify "Accordion_Header" element visibility in "Target_Store_Accordion" on "New_Feature_Set" wizard
- Then verify "Collapse_Button" element visibility in "Target_Store_Accordion" on "New_Feature_Set" wizard
- Then verify "Online_Checkbox" element visibility in "Target_Store_Accordion" on "New_Feature_Set" wizard
- Then verify "Offline_Checkbox" element visibility in "Target_Store_Accordion" on "New_Feature_Set" wizard
- Then verify "External_Offline_Checkbox" element visibility in "Target_Store_Accordion" on "New_Feature_Set" wizard
- When collapse "Target_Store_Accordion" on "New_Feature_Set" wizard
- Then verify "Target_Store_Accordion" is collapsed on "New_Feature_Set" wizard
- Then verify "Access_Key_Checkbox" element visibility on "New_Feature_Set" wizard
- Then verify "Cancel_Button" element visibility on "New_Feature_Set" wizard
- Then verify "Save_Button" element visibility on "New_Feature_Set" wizard
- Then verify "Save_And_Ingest_Button" element visibility on "New_Feature_Set" wizard
-
- @FAILED_TODO
- #TODO: "New_File_Target_Path_Input" - component was changed
- @passive
- @demo
- Scenario: Check all mandatory components on Register Dataset Popup on Demo mode from Demo Page
- Given open url
- * turn on demo mode
- And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
- And wait load page
- When click on "name" in "Data_Collection_Actions_Table" table on "Demo_Project" wizard with offset "false"
- | name |
- | Register dataset |
- And wait load page
- Then "Title" element on "Register_Dataset" should contains "Register Dataset" value
- Then "Form_Text" component on "Register_Dataset" should be equal "Register_Artifact"."Form_Text"
- Then "Form_Subtext" component on "Register_Dataset" should contains "Register_Dataset"."Form_Subtext"
- Then verify "Name_Input" element visibility on "Register_Dataset" wizard
- Then verify "Name_Input" on "Register_Dataset" wizard should display "Input_Hint"."Dataset_Names_Unique"
- Then type value " " to "Name_Input" field on "Register_Dataset" wizard
- Then verify "Name_Input" on "Register_Dataset" wizard should display options "Input_Hint"."Artifact_Name_Hint"
- Then verify "Name_Input" options rules on form "Register_Dataset" wizard
- Then verify "Target_Path_Input" element visibility on "Register_Dataset" wizard
- Then type value " " to "Target_Path_Input" field on "Register_Dataset" wizard
- Then verify "Target_Path_Input" on "Register_Dataset" wizard should display warning "Input_Hint"."Input_Field_Invalid"
- Then verify "Description_Input" element visibility on "Register_Dataset" wizard
- Then type value " " to "Description_Input" field on "Register_Dataset" wizard
- Then verify "Description_Input" on "Register_Dataset" wizard should display warning "Input_Hint"."Input_Field_Invalid"
- Then verify "Cancel_Button" element visibility on "Register_Dataset" wizard
- Then "Cancel_Button" element on "Register_Dataset" should contains "Cancel" value
- Then verify "Register_Button" element visibility on "Register_Dataset" wizard
- Then "Register_Button" element on "Register_Dataset" should contains "Register" value
- Then click on "Register_Button" element on "Register_Dataset" wizard
- Then verify "Register_Button" element on "Register_Dataset" wizard is disabled
- Then type value "dataset" to "Name_Input" field on "Register_Dataset" wizard
- Then type value "target/path" to "Target_Path_Input" field on "Register_Dataset" wizard
- Then type value "new dataset description" to "Description_Input" field on "Register_Dataset" wizard
- Then verify "Register_Button" element on "Register_Dataset" wizard is enabled
- Then click on "Cancel_Button" element on "Register_Dataset" wizard
- Then verify if "Common_Popup" popup dialog appears
- Then click on "Cancel_Button" element on "Common_Popup" wizard
- Then verify if "Register_Dataset" popup dialog appears
- Then verify "Name_Input" input should contains "dataset" value on "Register_Dataset" wizard
- Then verify "Target_Path_Input" input should contains "target/path" value on "Register_Dataset" wizard
- Then verify "Description_Input" input should contains "new dataset description" value on "Register_Dataset" wizard
- Then click on "Register_Button" element on "Register_Dataset" wizard
- And wait load page
- Then verify breadcrumbs "tab" label should be equal "Datasets" value
- Then click on cell with value "dataset" in "name" column in "Datasets_Table" table on "Datasets" wizard
- Then "Header" element on "Datasets_Info_Pane" should contains "dataset" value
- Then check "dataset" value in "key" column in "Overview_Table" table on "Datasets_Info_Pane" wizard
- Then check "latest" value in "tag" column in "Overview_Table" table on "Datasets_Info_Pane" wizard
- Then check "target/path" value in "path" column in "Overview_Table" table on "Datasets_Info_Pane" wizard
-
- @FAILED_TODO
- #TODO: "New_File_Target_Path_Input" - component was changed
- @passive
- @demo
- Scenario: Check all mandatory components on Register File Popup on Demo mode from Demo Page
- Given open url
- * turn on demo mode
- And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
- And wait load page
- When click on "name" in "Data_Collection_Actions_Table" table on "Demo_Project" wizard with offset "false"
- | name |
- | Register artifact |
- And wait load page
- Then "Title" element on "Register_File_Popup" should contains "Register Artifact" value
- Then "Form_Text" component on "Register_File_Popup" should be equal "Register_Artifact"."Form_Text"
- Then "Form_Subtext" component on "Register_File_Popup" should contains "Register_Artifact"."Form_Subtext"
- Then verify "Cross_Cancel_Button" element visibility on "Register_File_Popup" wizard
- Then verify "New_File_Name_Input" element visibility on "Register_File_Popup" wizard
- Then verify "New_File_Name_Input" on "Register_File_Popup" wizard should display "Input_Hint"."Artifact_Names_Unique"
- Then type value " " to "New_File_Name_Input" field on "Register_File_Popup" wizard
- Then verify "New_File_Name_Input" on "Register_File_Popup" wizard should display options "Input_Hint"."Artifact_Name_Hint"
- Then verify "New_File_Name_Input" options rules on form "Register_File_Popup" wizard
- Then verify "New_File_Target_Path_Input" element visibility on "Register_File_Popup" wizard
- Then type value " " to "New_File_Target_Path_Input" field on "Register_File_Popup" wizard
- Then verify "New_File_Target_Path_Input" on "Register_File_Popup" wizard should display warning "Input_Hint"."Input_Field_Invalid"
- Then verify "New_File_Description_Input" element visibility on "Register_File_Popup" wizard
- Then type value " " to "New_File_Description_Input" field on "Register_File_Popup" wizard
- Then verify "New_File_Description_Input" on "Register_File_Popup" wizard should display warning "Input_Hint"."Input_Field_Invalid"
- Then verify "New_File_Type_Dropdown" element visibility on "Register_File_Popup" wizard
- Then verify "New_File_Type_Dropdown" dropdown element on "Register_File_Popup" wizard should contains "Register_Artifact"."Type_Options"
- Then select "Table" option in "New_File_Type_Dropdown" dropdown on "Register_File_Popup" wizard
- Then verify "Cancel_Button" element visibility on "Register_File_Popup" wizard
- Then "Cancel_Button" element on "Register_File_Popup" should contains "Cancel" value
- Then verify "Register_Button" element visibility on "Register_File_Popup" wizard
- Then "Register_Button" element on "Register_File_Popup" should contains "Register" value
- Then click on "Register_Button" element on "Register_File_Popup" wizard
- Then verify "Register_Button" element on "Register_File_Popup" wizard is disabled
- Then type value "artifact" to "New_File_Name_Input" field on "Register_File_Popup" wizard
- Then type value "target/path" to "New_File_Target_Path_Input" field on "Register_File_Popup" wizard
- Then type value "new artifact description" to "New_File_Description_Input" field on "Register_File_Popup" wizard
- Then verify "Register_Button" element on "Register_File_Popup" wizard is enabled
- Then click on "Cancel_Button" element on "Register_File_Popup" wizard
- Then verify if "Common_Popup" popup dialog appears
- Then click on "Cancel_Button" element on "Common_Popup" wizard
- Then verify if "Register_Dataset" popup dialog appears
- Then verify "New_File_Name_Input" input should contains "artifact" value on "Register_File_Popup" wizard
- Then verify "New_File_Target_Path_Input" input should contains "target/path" value on "Register_File_Popup" wizard
- Then verify "New_File_Description_Input" input should contains "new artifact description" value on "Register_File_Popup" wizard
- Then verify "New_File_Type_Dropdown" dropdown on "Register_File_Popup" wizard selected option value "Table"
- Then click on "Register_Button" element on "Register_File_Popup" wizard
- And wait load page
- Then verify breadcrumbs "tab" label should be equal "Artifacts" value
- Then click on cell with value "artifact" in "name" column in "Files_Table" table on "Files" wizard
- Then "Header" element on "Files_Info_Pane" should contains "artifact" value
- Then check "artifact" value in "key" column in "Overview_Table" table on "Files_Info_Pane" wizard
- Then check "latest" value in "tag" column in "Overview_Table" table on "Files_Info_Pane" wizard
- Then check "target/path" value in "path" column in "Overview_Table" table on "Files_Info_Pane" wizard
-
- @FAILED_TODO
- #TODO: click on "name" in "Data_Collection_Additional_Actions_Table" table on "Demo_Project" - component was changed on project home
- @passive
- @demo
- Scenario: Check all mandatory components on Create a Feature Vector Popup on Demo mode from Demo Page
- Given open url
- * turn on demo mode
- And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
- And wait load page
- Then click on "Data_Collection_Additional_Actions_Button" element on "Demo_Project" wizard
- And wait load page
- When click on "name" in "Data_Collection_Additional_Actions_Table" table on "Demo_Project" wizard with offset "false"
- | name |
- | Create a Feature Vector |
- And wait load page
- Then "Title" element on "Create_Feature_Vector_Popup" should contains "Create feature vector" value
- Then verify "Cross_Cancel_Button" element visibility on "Create_Feature_Vector_Popup" wizard
- Then verify "Name_Input" element visibility on "Create_Feature_Vector_Popup" wizard
- Then type value " " to "Name_Input" field on "Create_Feature_Vector_Popup" wizard
- Then verify "Name_Input" options rules on "Create_Feature_Vector_Popup" wizard
- Then verify "Tag_Input" element visibility on "Create_Feature_Vector_Popup" wizard
- Then verify "Description_Input" element visibility on "Create_Feature_Vector_Popup" wizard
- Then verify "Labels_Table" element visibility on "Create_Feature_Vector_Popup" wizard
-
- @passive
- @demo
- Scenario: Check all mandatory components on Feature Set tab on Demo mode from Demo Page
- Given open url
- * turn on demo mode
- And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
- And wait load page
- When click on "name" in "Data_Collection_Links_Table" table on "Demo_Project" wizard with offset "false"
- | name |
- | Feature Sets |
- And wait load page
- Then verify breadcrumbs "tab" label should be equal "Feature Store" value
- Then verify "Feature_Store_Tab_Selector" on "Feature_Store_Feature_Sets_Tab" wizard should contains "Feature_Store"."Tab_List"
- Then verify "Feature Sets" tab is active in "Feature_Store_Tab_Selector" on "Feature_Store_Feature_Sets_Tab" wizard
- Then verify "Table_Refresh_Button" element visibility on "Feature_Store_Feature_Sets_Tab" wizard
- Then verify "Table_Tag_Filter_Dropdown" element visibility on "Feature_Store_Feature_Sets_Tab" wizard
- Then verify "Table_Tag_Filter_Dropdown" dropdown element on "Feature_Store_Feature_Sets_Tab" wizard should contains "Dropdown_Options"."Tag_Filer_Options"
- Then type value " " to "Table_Name_Filter_Input" field on "Feature_Store_Feature_Sets_Tab" wizard
- Then verify "Table_Name_Filter_Input" on "Feature_Store_Feature_Sets_Tab" wizard should display warning "Input_Hint"."Input_Field_Invalid"
- Then verify "Table_Label_Filter_Input" element visibility on "Feature_Store_Feature_Sets_Tab" wizard
- Then type value " " to "Table_Label_Filter_Input" field on "Feature_Store_Feature_Sets_Tab" wizard
- Then verify "Table_Label_Filter_Input" on "Feature_Store_Feature_Sets_Tab" wizard should display warning "Input_Hint"."Input_Field_Invalid"
- Then verify "Feature_Sets_Table" element visibility on "Feature_Store_Feature_Sets_Tab" wizard
- Then verify "Feature_Store_Tab_Selector" element visibility on "Feature_Store_Feature_Sets_Tab" wizard
- Then verify "Create_Set_Button" element visibility on "Feature_Store_Feature_Sets_Tab" wizard
- Then "Create_Set_Button" element on "Feature_Store_Feature_Sets_Tab" should contains "Create Set" value
-
- @FAILED_TODO
- #TODO: verify "Table_Labels_Filter_Input" element visibility - block element is changed, hidden
- @passive
- @demo
- Scenario: Check all mandatory components on Files tab on Demo mode from Demo Page
- Given open url
- * turn on demo mode
- And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
- And wait load page
- When click on "name" in "Data_Collection_Links_Table" table on "Demo_Project" wizard with offset "false"
- | name |
- | Artifacts |
- And wait load page
- Then verify breadcrumbs "tab" label should be equal "Artifacts" value
- Then verify "Table_Name_Filter_Input" element visibility on "Files" wizard
- Then verify "Table_Label_Filter_Input" element visibility on "Files" wizard
- Then verify "Table_Tree_Filter_Dropdown" element visibility on "Files" wizard
- Then verify "Show_Iterations_Checkbox" element visibility on "Files" wizard
- Then verify "Table_Refresh_Button" element visibility on "Files" wizard
- Then verify "Files_Table" element visibility on "Files" wizard
- Then verify "Register_File_Button" element visibility on "Files" wizard
- Then "Register_File_Button" element on "Files" should contains "Register Artifact" value
-
- @FAILED_TODO
- #TODO: verify "Table_Labels_Filter_Input" element visibility - block element is changed, hidden
- @passive
- @demo
- Scenario: Check all mandatory components on Datasets tab on Demo mode from Demo Page
- Given open url
- * turn on demo mode
- And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
- And wait load page
- When click on "name" in "Data_Collection_Links_Table" table on "Demo_Project" wizard with offset "false"
- | name |
- | Datasets |
- And wait load page
- Then verify breadcrumbs "tab" label should be equal "Datasets" value
- Then verify "Register_Dataset_Button" element visibility on "Datasets" wizard
- Then "Register_Dataset_Button" element on "Datasets" should contains "Register Dataset" value
- Then verify "Table_Name_Filter_Input" element visibility on "Datasets" wizard
- Then verify "Table_Label_Filter_Input" element visibility on "Datasets" wizard
- Then verify "Table_Tree_Filter_Dropdown" element visibility on "Datasets" wizard
- Then verify "Table_Tree_Filter_Dropdown" dropdown element on "Datasets" wizard should contains "Dropdown_Options"."Tag_Filer_Options"
- Then verify "Table_Refresh_Button" element visibility on "Datasets" wizard
-
- @passive
- @demo
- Scenario: Check all mandatory components on Feature Vectors tab on Demo mode from Demo Page
- Given open url
- * turn on demo mode
- And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
- And wait load page
- When click on "name" in "Data_Collection_Links_Table" table on "Demo_Project" wizard with offset "false"
- | name |
- | Feature Vectors |
- And wait load page
- Then verify "Table_Name_Filter_Input" element visibility on "Feature_Store_Features_Vectors_Tab" wizard
- Then verify "Table_Label_Filter_Input" element visibility on "Feature_Store_Features_Vectors_Tab" wizard
- Then verify "Table_Tag_Filter_Dropdown" element visibility on "Feature_Store_Features_Vectors_Tab" wizard
- Then verify "Table_Tag_Filter_Dropdown" dropdown element on "Feature_Store_Features_Vectors_Tab" wizard should contains "Dropdown_Options"."Tag_Filer_Options"
- Then verify "Table_Refresh_Button" element visibility on "Feature_Store_Features_Vectors_Tab" wizard
-
- @passive
- @demo
- Scenario: Check all mandatory components on ML Functions tab on Demo mode from Demo Page
- Given open url
- * turn on demo mode
- And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
- And wait load page
- When click on "name" in "Development_Links_Table" table on "Demo_Project" wizard with offset "false"
- | name |
- | ML Functions |
- And wait load page
- Then verify "Table_Name_Filter_Input" element visibility on "ML_Functions" wizard
- Then verify "Show_Untagged_Functions_Checkbox" element visibility on "ML_Functions" wizard
- Then verify "New_Function_Button" element visibility on "ML_Functions" wizard
- Then "New_Function_Button" element on "ML_Functions" should contains "New" value
- Then verify "Table_Refresh_Button" element visibility on "ML_Functions" wizard
- Then verify "Table_Expand_Rows_Button" element visibility on "ML_Functions" wizard
-
- @passive
- @demo
- Scenario: Check all mandatory components on Jobs tab on Demo mode from Demo Page
- Given open url
- * turn on demo mode
- And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
- And wait load page
- When click on "name" in "Development_Links_Table" table on "Demo_Project" wizard with offset "false"
- | name |
- | Jobs |
- And wait load page
- Then verify "Jobs_Tab_Selector" on "Jobs_Monitor_Tab" wizard should contains "Jobs_And_Workflows"."Tab_List"
- Then verify "Monitor Jobs" tab is active in "Jobs_Tab_Selector" on "Jobs_Monitor_Tab" wizard
- Then verify "New_Job_Button" element visibility on "Jobs_Monitor_Tab" wizard
- Then "New_Job_Button" element on "Jobs_Monitor_Tab" should contains "Batch Run" value
- Then verify "Resource_Monitoring_Button" element visibility on "Jobs_Monitor_Tab" wizard
- Then verify "Table_Refresh_Button" element visibility on "Jobs_Monitor_Tab" wizard
- Then verify "Status_Filter_Dropdown" element visibility on "Jobs_Monitor_Tab" wizard
- Then verify "Status_Filter_Dropdown" dropdown element on "Jobs_Monitor_Tab" wizard should contains "Dropdown_Options"."Status_Filter_Options"
-
- @FAILED_TODO
- #TODO: verify "Table_Labels_Filter_Input" element visibility - block element is changed, hidden
- @passive
- @demo
- Scenario: Check all mandatory components on Models tab on Demo mode from Demo Page
- Given open url
- * turn on demo mode
- And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
- And wait load page
- When click on "name" in "Development_Links_Table" table on "Demo_Project" wizard with offset "false"
- | name |
- | Models |
- And wait load page
- Then verify "Models_Tab_Selector" on "Models" wizard should contains "Models"."Tab_List"
- Then verify "Table_Name_Filter_Input" element visibility on "Models" wizard
- Then verify "Table_Labels_Filter_Input" element visibility on "Models" wizard
- Then verify "Table_Tree_Filter_Dropdown" element visibility on "Models" wizard
- Then verify "Show_Iterations_Checkbox" element visibility on "Models" wizard
- Then verify "Table_Refresh_Button" element visibility on "Models" wizard
- Then verify "Models_Table" element visibility on "Models" wizard
- Then verify "Register_Model_Button" element visibility on "Models" wizard
- Then "Register_Model_Button" element on "Models" should contains "Register Model" value
-
- @passive
- @demo
- Scenario: Check all mandatory components on Models tab on Demo mode from Demo Page
- Given open url
- * turn on demo mode
- And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
- And wait load page
- When click on "name" in "Development_Links_Table" table on "Demo_Project" wizard with offset "false"
- | name |
- | Workflows |
- And wait load page
- Then verify "Monitor Workflows" tab is active in "Jobs_Tab_Selector" on "Jobs_Monitor_Tab" wizard
-
- @passive
- @demo
- Scenario: Check all mandatory components on Models Endpoint tab on Demo mode from Demo Page
- Given open url
- * turn on demo mode
- And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
- And wait load page
- When click on "name" in "Deployment_Links_Table" table on "Demo_Project" wizard with offset "false"
- | name |
- | Model Endpoints |
- And wait load page
- Then verify "Model Endpoints" tab is active in "Models_Tab_Selector" on "Models" wizard
-
- @passive
- @demo
- Scenario: Check all mandatory components on Real-Time Piplines tab on Demo mode from Demo Page
- Given open url
- * turn on demo mode
- And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
- And wait load page
- When click on "name" in "Deployment_Links_Table" table on "Demo_Project" wizard with offset "false"
- | name |
- | RT Pipelines |
- And wait load page
- Then verify "Real-Time Pipelines" tab is active in "Models_Tab_Selector" on "Models" wizard
-
- @passive
- @demo
- Scenario: Check all mandatory components on Monitoring tab on Demo mode from Demo Page
- Given open url
- * turn on demo mode
- And click on row root with value "default" in "name" column in "Projects_Table" table on "Projects" wizard
- And wait load page
- When click on "name" in "Deployment_Links_Table" table on "Demo_Project" wizard with offset "false"
- | name |
- | Monitoring |
- And wait load page
- Then verify breadcrumbs "project" label should be equal "default" value
- Then verify "Create_New" element visibility on "Project" wizard
- Then verify "Refresh_Button" element visibility on "Project" wizard
- Then verify "Dashboard_Realtime_Functions_Table" element visibility on "Project" wizard
- Then verify "Jobs_And_Workflows" element visibility on "Project" wizard
- Then verify "Mono_Values_Cards" element visibility on "Project" wizard
- Then verify "Jobs_Info_Card_Statistics" element visibility on "Project" wizard
- Then verify "Real_Time_Functions_Card_Statistics" element visibility on "Project" wizard
- When hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
- Then verify "General_Info_Quick_Links" element visibility on "commonPagesHeader" wizard
-
@passive
Scenario: Check redirect to project`s job page
Given open url
@@ -1267,7 +735,7 @@ Feature: MLRun Project Page
Then verify "Consumer_Groups_Table" element visibility on "Consumer_Groups" wizard
Then "Title" element on "Consumer_Groups" should contains "Consumer groups (v3io stream)" value
Then "Description" element on "Consumer_Groups" should contains "This report displays the project's consumer groups for Iguazio v3io streams" value
-
+
Scenario: Verify filtering by name on Consumer Groups drill-down
Given open url
And wait load page
diff --git a/tests/features/projectsPage.feature b/tests/features/projectsPage.feature
index 9d192bd6a..190160f37 100644
--- a/tests/features/projectsPage.feature
+++ b/tests/features/projectsPage.feature
@@ -5,7 +5,7 @@ Feature: MLRun Projects Page
@passive
@FAILED_TODO
#TODO: last two steps are unstable on small screen extensions because scroll change the screen coordinates, it needs another solution
- Scenario: Check all mandatory components
+ Scenario: MLPr001 - Check all mandatory components
Given open url
And wait load page
Then verify redirection from "INVALID" to "projects"
@@ -22,7 +22,7 @@ Feature: MLRun Projects Page
Then value in "failed" column with "tooltip" in "Projects_Table" on "Projects" wizard should contains "Failed ML jobs and nuclio functions in the last 24 hours"
@passive
- Scenario: Verify filtering by project name
+ Scenario: MLPr002 - Verify searching by project name
Given open url
And wait load page
Then type value "stocks" to "Search_Projects_Input" field on "Projects" wizard
@@ -31,9 +31,23 @@ Feature: MLRun Projects Page
Then click on "Refresh_Projects_Button" element on "Projects" wizard
And wait load page
Then value in "name" column with "text" in "Projects_Table" on "Projects" wizard should contains "at"
+ Then type value "default" to "Search_Projects_Input" field on "Projects" wizard
+ Then value in "name" column with "text" in "Projects_Table" on "Projects" wizard should contains "default"
+ Then type value "" to "Search_Projects_Input" field on "Projects" wizard
+ Then click on "Refresh_Projects_Button" element on "Projects" wizard
+ Then type value "Default" to "Search_Projects_Input" field on "Projects" wizard
+ Then value in "name" column with "text" in "Projects_Table" on "Projects" wizard should contains "default"
+ Then type value "" to "Search_Projects_Input" field on "Projects" wizard
+ Then click on "Refresh_Projects_Button" element on "Projects" wizard
+ Then type value "deFault" to "Search_Projects_Input" field on "Projects" wizard
+ Then value in "name" column with "text" in "Projects_Table" on "Projects" wizard should contains "default"
+ Then type value "" to "Search_Projects_Input" field on "Projects" wizard
+ Then click on "Refresh_Projects_Button" element on "Projects" wizard
+ Then type value "defa" to "Search_Projects_Input" field on "Projects" wizard
+ Then value in "name" column with "text" in "Projects_Table" on "Projects" wizard should contains "default"
@passive
- Scenario: Sort projects in ascending and descending order
+ Scenario: MLPr003 - Sort projects in ascending and descending order
Given open url
And wait load page
When select "By name" option in "Projects_Sort_Dropdown" filter dropdown on "Projects" wizard
@@ -43,7 +57,7 @@ Feature: MLRun Projects Page
Then sort projects in ascending order
@passive
- Scenario: Verify all mandatory components on Create new ML Project
+ Scenario: MLPr004 - Verify all mandatory components on Create new ML Project
Given open url
And wait load page
Then check "automation-test-name" value not in "name" column in "Projects_Table" table on "Projects" wizard
@@ -63,7 +77,7 @@ Feature: MLRun Projects Page
Then "Error_Message" component on "Create_New_Project" should be equal "Error_Messages"."Project_Already_Exists"
@passive
- Scenario: Verify all mandatory components on Archive ML Project
+ Scenario: MLPr005 - Verify all mandatory components on Archive ML Project
Given open url
And wait load page
Then select "Archive" option in action menu on "Projects" wizard in "Projects_Table" table at row with "churn-project-admin" value in "name" column
@@ -75,7 +89,7 @@ Feature: MLRun Projects Page
Then "Confirm_Button" element on "Common_Popup" should contains "Archive" value
@passive
- Scenario: Verify all mandatory components on Delete existing ML Project
+ Scenario: MLPr006 - Verify all mandatory components on Delete existing ML Project
Given open url
And wait load page
Then select "Delete" option in action menu on "Projects" wizard in "Projects_Table" table at row with "churn-project-admin" value in "name" column
@@ -87,7 +101,7 @@ Feature: MLRun Projects Page
Then "Delete_Button" element on "Common_Popup" should contains "Delete" value
@sanity
- Scenario: Create new ML Project with description
+ Scenario: MLPr007 - Create new ML Project with description
Given open url
And wait load page
Then check "automation-test-name" value not in "name" column in "Projects_Table" table on "Projects" wizard
@@ -100,7 +114,7 @@ Feature: MLRun Projects Page
Then check "automation-test-name" value in "name" column in "Projects_Table" table on "Projects" wizard
@passive
- Scenario: Archive ML Project
+ Scenario: MLPr008 - Archive ML Project
* set tear-down property "project" created with "automation-test-name1" value
* create "automation-test-name1" MLRun Project with code 201
Given open url
@@ -114,7 +128,7 @@ Feature: MLRun Projects Page
Then check "automation-test-name1" value in "name" column in "Projects_Table" table on "Projects" wizard
@passive
- Scenario: Delete existing ML Project
+ Scenario: MLPr009 - Delete existing ML Project
* set tear-down property "project" created with "automation-test-name2" value
* create "automation-test-name2" MLRun Project with code 201
Given open url
@@ -126,7 +140,7 @@ Feature: MLRun Projects Page
Then check "automation-test-name2" value not in "name" column in "Projects_Table" table on "Projects" wizard
@passive
- Scenario: Unarchive ML Project
+ Scenario: MLPr010 - Unarchive ML Project
* set tear-down property "project" created with "automation-test-name7" value
* create "automation-test-name7" MLRun Project with code 201
Given open url
@@ -141,19 +155,23 @@ Feature: MLRun Projects Page
Then select "Unarchive" option in action menu on "Projects" wizard in "Projects_Table" table at row with "automation-test-name7" value in "name" column
Then click on "Active_Projects_Button" element on "Projects" wizard
Then check "automation-test-name7" value in "name" column in "Projects_Table" table on "Projects" wizard
-
+
@passive
- Scenario: Verify View YAML action
+ Scenario: MLPr011 - Verify View YAML action
Given open url
And wait load page
Then select "View YAML" option in action menu on "Projects" wizard in "Projects_Table" table at row with "default" value in "name" column
Then verify if "View_YAML" popup dialog appears
Then verify "Cross_Cancel_Button" element visibility on "View_YAML" wizard
Then verify "YAML_Modal_Container" element visibility on "View_YAML" wizard
-
+ Then click on "Cross_Cancel_Button" element on "View_YAML" wizard
+ Then select "Export YAML" option in action menu on "Projects" wizard in "Projects_Table" table at row with "default" value in "name" column
+ And wait load page
+ Then check that "default.yaml" file is existed on "Downloads" directory
+
@danger
# Run this test case only with mocked backend!!!
- Scenario: Check projects limit message
+ Scenario: MLPr012 - Check projects limit message
Then create up to limit projects with code 201
Given open url
And wait load page
@@ -161,3 +179,45 @@ Feature: MLRun Projects Page
Then type into "Name_Input" on "Create_New_Project" popup dialog "automation-test-name201" value
Then click on "Create_Button" element on "Create_New_Project" wizard
Then "Error_Message" component on "Create_New_Project" should contains "Error_Messages"."Projects_Limit_Reached"
+
+ @passive
+ Scenario: MLPr013 - Create new ML Project and check navigation through project navigation menu
+ Given open url
+ And wait load page
+ Then check "navigation-test" value not in "name" column in "Projects_Table" table on "Projects" wizard
+ Then click on "New_Project_Button" element on "Projects" wizard
+ Then verify if "Create_New_Project" popup dialog appears
+ Then type into "Name_Input" on "Create_New_Project" popup dialog "navigation-test" value
+ Then click on "Create_Button" element on "Create_New_Project" wizard
+ And click on row root with value "navigation-test" in "name" column in "Projects_Table" table on "Projects" wizard
+ And wait load page
+ Then verify value should equal "navigation-test" in "Header_Name_Label" on "Demo_Project" wizard
+ And hover "Project_Navigation_Toggler" component on "commonPagesHeader" wizard
+ Then click on "Pin_Quick_Link_Button" element on "commonPagesHeader" wizard
+ And click on cell with value "Project monitoring" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ Then verify breadcrumbs "tab" label should be equal "Project Monitoring" value
+ And click on cell with value "Feature store" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ Then verify breadcrumbs "tab" label should be equal "Feature Store" value
+ And click on cell with value "Datasets" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ Then verify breadcrumbs "tab" label should be equal "Datasets" value
+ And click on cell with value "Artifacts" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ Then verify breadcrumbs "tab" label should be equal "Artifacts" value
+ And click on cell with value "Models" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ Then verify breadcrumbs "tab" label should be equal "Models" value
+ And click on cell with value "Jobs and workflows" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ Then verify breadcrumbs "tab" label should be equal "Jobs" value
+ And click on cell with value "ML functions" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ Then verify breadcrumbs "tab" label should be equal "ML functions" value
+ And click on cell with value "ML functions" in "link" column in "General_Info_Quick_Links" table on "commonPagesHeader" wizard
+ And wait load page
+ Then verify breadcrumbs "tab" label should be equal "ML functions" value
+ Then click on "Project_Settings_Button" element on "commonPagesHeader" wizard
+ And wait load page
+ Then verify breadcrumbs "tab" label should be equal "Settings" value
\ No newline at end of file
diff --git a/tests/features/step-definitions/steps.js b/tests/features/step-definitions/steps.js
index f8d172eca..27d1f7809 100644
--- a/tests/features/step-definitions/steps.js
+++ b/tests/features/step-definitions/steps.js
@@ -44,7 +44,11 @@ import {
verifyText,
verifyTextRegExp,
waitPageLoad,
- waiteUntilComponent
+ waiteUntilComponent,
+ verifyElementActive,
+ verifyElementNotActive,
+ generatePath,
+ determineFileAccess
} from '../common/actions/common.action'
import {
checkTableColumnValues,
@@ -64,22 +68,26 @@ import {
checkHintText,
checkInputAccordingHintText,
checkWarningHintText,
+ checkWarningText,
getInputValue,
typeValue,
+ typeValueWithoutInputgroup,
verifyInputDisabled,
+ verifyInputClassDisabled,
verifyInputEnabled,
+ verifyInputClassEnabled,
verifyTypedValue,
+ verifyTypedValueWithoutInputgroup,
verifyTextAreaCounter
} from '../common/actions/input-group.action'
-import {
- incrementValue,
- decrementValue
-} from '../common/actions/number-input-group.action'
+import { incrementValue, decrementValue } from '../common/actions/number-input-group.action'
import {
checkCheckbox,
isCheckboxChecked,
isCheckboxUnchecked,
- uncheckCheckbox
+ uncheckCheckbox,
+ verifyCheckboxEnabled,
+ verifyCheckboxDisabled
} from '../common/actions/checkbox.action'
import {
applyDatetimePickerRange,
@@ -96,10 +104,7 @@ import {
isRadioButtonUnselected,
selectRadiobutton
} from '../common/actions/radio-button.action'
-import {
- openActionMenu,
- selectOptionInActionMenu
-} from '../common/actions/action-menu.action'
+import { openActionMenu, selectOptionInActionMenu } from '../common/actions/action-menu.action'
import { expect } from 'chai'
Given('open url', async function() {
@@ -163,6 +168,19 @@ Then(
}
)
+Then(
+ 'verify redirection to {string}',
+ async function (expectedPath) {
+ const expectedUrl = `http://${test_url}:${test_port}/${expectedPath}`
+ const afterURL = await this.driver.getCurrentUrl()
+
+ expect(expectedUrl).equal(
+ afterURL,
+ `Redirection should be "${expectedUrl}"\nbut is "${afterURL}"`
+ )
+ }
+)
+
Then('wait load page', async function() {
await waitPageLoad(this.driver, pageObjects['commonPagesHeader']['loader'])
await this.driver.sleep(500)
@@ -221,19 +239,72 @@ Then('type value {string} to {string} field on {string} wizard', async function(
await this.driver.sleep(250)
})
-Then('verify {string} element on {string} wizard is enabled', async function(
- elementName,
- wizardName
+Then('type value {string} to {string} field on {string} wizard without inputgroup', async function(
+ value,
+ inputField,
+ wizard
) {
- await verifyElementEnabled(this.driver, pageObjects[wizardName][elementName])
+ await typeValueWithoutInputgroup(this.driver, pageObjects[wizard][inputField], value)
+ await this.driver.sleep(250)
+ await verifyTypedValueWithoutInputgroup(this.driver, pageObjects[wizard][inputField], value)
+ await this.driver.sleep(250)
})
-Then('verify {string} element on {string} wizard is disabled', async function(
- elementName,
- wizardName
-) {
- await verifyElementDisabled(this.driver, pageObjects[wizardName][elementName])
-})
+Then(
+ 'verify {string} element on {string} wizard is enabled',
+ async function (elementName, wizardName) {
+ await verifyElementEnabled(this.driver, pageObjects[wizardName][elementName])
+ }
+)
+
+Then(
+ 'verify {string} not input element in {string} on {string} wizard is enabled',
+ async function (elementName, accordionName, wizardName) {
+ await verifyElementEnabled(this.driver, pageObjects[wizardName][accordionName][elementName])
+ }
+)
+
+Then(
+ 'verify {string} not input element in {string} on {string} wizard is active',
+ async function (elementName, accordionName, wizardName) {
+ await verifyElementActive(this.driver, pageObjects[wizardName][accordionName][elementName])
+ }
+)
+
+Then(
+ 'verify {string} not input element in {string} on {string} wizard is NOT active',
+ async function (elementName, accordionName, wizardName) {
+ await verifyElementNotActive(this.driver, pageObjects[wizardName][accordionName][elementName])
+ }
+)
+
+Then(
+ 'verify {string} element on {string} wizard is disabled',
+ async function (elementName, wizardName) {
+ await verifyElementDisabled(this.driver, pageObjects[wizardName][elementName])
+ }
+)
+
+Then(
+ 'verify {string} not input element in {string} on {string} wizard is disabled',
+ async function (elementName, accordionName, wizardName) {
+ await verifyElementDisabled(this.driver, pageObjects[wizardName][accordionName][elementName])
+ }
+)
+
+Then(
+ 'verify checkbox {string} element on {string} wizard is enabled',
+ async function (elementName, wizardName) {
+ await verifyCheckboxEnabled(this.driver, pageObjects[wizardName][elementName])
+ }
+)
+
+Then(
+ 'verify checkbox {string} element on {string} wizard is disabled',
+ async function (elementName, wizardName) {
+ await verifyCheckboxDisabled(this.driver, pageObjects[wizardName][elementName])
+ }
+)
Then(
'verify {string} element in {string} on {string} wizard is enabled',
@@ -245,6 +316,16 @@ Then(
}
)
+Then(
+ 'verify {string} element in {string} on {string} wizard is enabled by class name',
+ async function(inputField, accordionName, wizardName) {
+ await verifyInputClassEnabled(
+ this.driver,
+ pageObjects[wizardName][accordionName][inputField]
+ )
+ }
+)
+
Then(
'verify {string} element in {string} on {string} wizard is disabled',
async function(inputField, accordionName, wizardName) {
@@ -255,6 +336,16 @@ Then(
}
)
+Then(
+ 'verify {string} element in {string} on {string} wizard is disabled by class name',
+ async function(inputField, accordionName, wizardName) {
+ await verifyInputClassDisabled(
+ this.driver,
+ pageObjects[wizardName][accordionName][inputField]
+ )
+ }
+)
+
When(
'type searchable fragment {string} into {string} on {string} wizard',
async function(subName, inputGroup, wizard) {
@@ -367,28 +458,24 @@ Then(
)
Then(
- 'decrease value on {int} points in {string} field with {string} on {string} on {string} wizard',
- async function(value, inputField, unit, accordion, wizard) {
- const txt = await getInputValue(
- this.driver,
- pageObjects[wizard][accordion][inputField]
- )
- const unitValue = unit === 'cpu' ? value / 1000 : unit === 'millicpu' ? value * 100 : value
- const result =
- unit === 'cpu'
- ? (Number.parseFloat(txt) - unitValue).toFixed(3)
- : Number.parseFloat(txt) - unitValue
- await decrementValue(
- this.driver,
- pageObjects[wizard][accordion][inputField],
- value
- )
- await verifyTypedValue(
- this.driver,
- pageObjects[wizard][accordion][inputField],
- result.toString()
- )
+ 'decrease value on {int} points in {string} field with {string} on {string} on {string} wizard',
+ async function (value, inputField, unit, accordion, wizard) {
+ const txt = await getInputValue(this.driver, pageObjects[wizard][accordion][inputField])
+ const unitValue = unit === 'cpu' ? value / 1000 : unit === 'millicpu' ? value * 100 : value
+ let result =
+ unit === 'cpu'
+ ? (Number.parseFloat(txt) - unitValue).toFixed(3)
+ : Number.parseFloat(txt) - unitValue
+ if(result < 1){
+ result = 1
}
+ await decrementValue(this.driver, pageObjects[wizard][accordion][inputField], value)
+ await verifyTypedValue(
+ this.driver,
+ pageObjects[wizard][accordion][inputField],
+ result.toString()
+ )
+ }
)
Then(
@@ -437,6 +524,18 @@ Then(
}
)
+Then(
+ '{string} element in {string} on {string} should contains {string} attribute value',
+ async function (component, accordion, wizard, value) {
+ await verifyComponentContainsAttributeValue(
+ this.driver,
+ pageObjects[wizard][accordion][component]['inputField'],
+ 'value',
+ value
+ )
+ }
+)
+
Then(
'{string} component on {string} should be equal {string}.{string}',
async function(component, wizard, constStorage, constValue) {
@@ -658,6 +757,14 @@ Then('verify {string} element not exists on {string} wizard', async function(
await componentIsNotPresent(this.driver, pageObjects[wizard][component])
})
+Then('verify {string} element not exists in {string} on {string} wizard', async function(
+ component,
+ accordion,
+ wizard
+) {
+ await componentIsNotPresent(this.driver, pageObjects[wizard][accordion][component])
+})
+
When('collapse {string} on {string} wizard', async function(accordion, wizard) {
await collapseAccordionSection(
this.driver,
@@ -808,6 +915,17 @@ Then(
}
)
+Then(
+ 'verify labels warning should display options {string}.{string}',
+ async function(constStorage, constValue) {
+ await checkWarningText(
+ this.driver,
+ pageObjects['commonPagesHeader']['Common_Options'],
+ pageObjectsConsts[constStorage][constValue]
+ )
+ }
+)
+
Then(
'verify {string} in {string} on {string} wizard should display options {string}.{string}',
async function(inputField, accordion, wizard, constStorage, constValue) {
@@ -939,16 +1057,14 @@ Then(
}
)
-When('click on {string} element in {string} on {string} wizard', async function(
- component,
- accordion,
- wizardName
-) {
- await clickOnComponent(
- this.driver,
- pageObjects[wizardName][accordion][component]
- )
-})
+When(
+ 'click on {string} element in {string} on {string} wizard',
+ async function (component, accordion, wizardName) {
+ await waiteUntilComponent(this.driver, pageObjects[wizardName][accordion][component])
+ await clickOnComponent(this.driver, pageObjects[wizardName][accordion][component])
+ await this.driver.sleep(250)
+ }
+)
Then('is {string} on {string} selected', async function(radiobutton, wizard) {
await isRadioButtonSelected(this.driver, pageObjects[wizard][radiobutton])
@@ -1054,18 +1170,25 @@ Then('select {string} option in action menu on {string} wizard', async function(
await selectOptionInActionMenu(this.driver, actionMenu, option)
})
-Then('verify {string} according hint rules on {string} wizard', async function(
- inputField,
- wizardName
-) {
- await checkInputAccordingHintText(
- this.driver,
- this.attach,
- pageObjects[wizardName][inputField],
- pageObjects['commonPagesHeader']['Common_Hint']
- )
+Then('check that {string} file is existed on {string} directory', async function (file, filePath) {
+ const path = await generatePath(file, filePath)
+ await this.driver.sleep(150)
+ await determineFileAccess(path, file)
+ await this.driver.sleep(150)
})
+Then(
+ 'verify {string} according hint rules on {string} wizard',
+ async function (inputField, wizardName) {
+ await checkInputAccordingHintText(
+ this.driver,
+ this.attach,
+ pageObjects[wizardName][inputField],
+ pageObjects['commonPagesHeader']['Common_Hint']
+ )
+ }
+)
+
Then('verify {string} options rules on {string} wizard', async function(
inputField,
wizardName
diff --git a/tests/features/step-definitions/table.steps.js b/tests/features/step-definitions/table.steps.js
index 6890cee98..9fb7035c2 100644
--- a/tests/features/step-definitions/table.steps.js
+++ b/tests/features/step-definitions/table.steps.js
@@ -30,16 +30,21 @@ import {
scrollToElement,
typeIntoInputField,
verifyText,
+ verifyComponentContainsAttributeValue,
+ verifyTypedText,
waitPageLoad
} from '../common/actions/common.action'
import {
checkCellHintText,
findRowIndexesByColumnTooltipsValue,
findRowIndexesByColumnValue,
+ findRowIndexesByColumnValueAttribute,
getCellByIndexColumn,
getTableRows,
isContainsSubstringInColumnCells,
+ isContainsSubstringInColumnAttributrCells,
isContainsSubstringInColumnDropdownCells,
+ isContainsSubstringInColumnDropdownCellsOverlay,
isContainsSubstringInColumnTooltipCells,
isContainsValueInColumn,
isDatetimeCelsValueInRange,
@@ -55,6 +60,7 @@ import { typeValue } from '../common/actions/input-group.action'
import {
checkDropdownSelectedOption,
openDropdown,
+ selectOptionInDropdownWithoutCheck,
selectOptionInDropdown
} from '../common/actions/dropdown.action'
import pageObjectsConsts from '../common-tools/common-consts'
@@ -146,6 +152,185 @@ When('add rows to {string} table on {string} wizard', async function (table, wiz
}
})
+When('add data to {string} table on {string} wizard', async function (table, wizard, dataTable) {
+ const inputFields = dataTable['rawTable'][0]
+ const rows = dataTable.rows()
+ for (const row_indx in rows) {
+ await clickOnComponent(this.driver, pageObjects[wizard][table]['add_row_btn'])
+ await this.driver.sleep(100)
+ await clickOnComponent(this.driver, pageObjects[wizard][table]['tableFields'][inputFields[0]](parseInt(row_indx) + 2))
+ await this.driver.sleep(250)
+ await typeIntoInputField(
+ this.driver,
+ pageObjects[wizard][table]['tableFields'][inputFields[0]](parseInt(row_indx) + 2),
+ rows[row_indx][0]
+ )
+ await this.driver.sleep(100)
+ await openDropdown(this.driver, pageObjects[wizard][table]['tableFields'][inputFields[1]](parseInt(row_indx) + 2))
+ await selectOptionInDropdownWithoutCheck(
+ this.driver,
+ pageObjects[wizard][table]['tableFields'][inputFields[1]](parseInt(row_indx) + 2),
+ rows[row_indx][1]
+ )
+ await this.driver.sleep(100)
+ await typeIntoInputField(
+ this.driver,
+ pageObjects[wizard][table]['tableFields'][inputFields[2]](parseInt(row_indx) + 2),
+ rows[row_indx][2]
+ )
+ await this.driver.sleep(100)
+ await hoverComponent(this.driver, pageObjects[wizard][table]['tableFields']['apply_btn'](parseInt(row_indx) + 2))
+ await this.driver.sleep(100)
+ await clickOnComponent(this.driver, pageObjects[wizard][table]['tableFields']['apply_btn'](parseInt(row_indx) + 2))
+ await this.driver.sleep(100)
+ }
+})
+
+When('add data to {string} table on {string} wizard with combobox', async function (table, wizard, dataTable) {
+ const inputFields = dataTable['rawTable'][0]
+ const rows = dataTable.rows()
+ for (const row_indx in rows) {
+ await clickOnComponent(this.driver, pageObjects[wizard][table]['add_row_btn'])
+ await this.driver.sleep(100)
+ await clickOnComponent(
+ this.driver,
+ pageObjects[wizard][table]['tableFields'][inputFields[0]](parseInt(row_indx) + 2)
+ )
+ await this.driver.sleep(250)
+ await typeIntoInputField(
+ this.driver,
+ pageObjects[wizard][table]['tableFields'][inputFields[0]](parseInt(row_indx) + 2),
+ rows[row_indx][0]
+ )
+ await this.driver.sleep(100)
+ await openDropdown(
+ this.driver,
+ pageObjects[wizard][table]['tableFields'][inputFields[1]](parseInt(row_indx) + 2)
+ )
+ await selectOptionInDropdownWithoutCheck(
+ this.driver,
+ pageObjects[wizard][table]['tableFields'][inputFields[1]](parseInt(row_indx) + 2),
+ rows[row_indx][1]
+ )
+ await this.driver.sleep(100)
+ await selectOptionInDropdownWithoutCheck(
+ this.driver,
+ pageObjects[wizard][table]['tableFields'][inputFields[2]](parseInt(row_indx) + 2),
+ rows[row_indx][2]
+ )
+ await this.driver.sleep(100)
+ await selectOptionInDropdownWithoutCheck(
+ this.driver,
+ pageObjects[wizard][table]['tableFields'][inputFields[3]](parseInt(row_indx) + 2),
+ rows[row_indx][3]
+ )
+ await this.driver.sleep(100)
+ await selectOptionInDropdownWithoutCheck(
+ this.driver,
+ pageObjects[wizard][table]['tableFields'][inputFields[4]](parseInt(row_indx) + 2),
+ rows[row_indx][4]
+ )
+ await this.driver.sleep(100)
+ await hoverComponent(
+ this.driver,
+ pageObjects[wizard][table]['tableFields']['apply_btn'](parseInt(row_indx) + 2)
+ )
+ await this.driver.sleep(100)
+ await clickOnComponent(
+ this.driver,
+ pageObjects[wizard][table]['tableFields']['apply_btn'](parseInt(row_indx) + 2)
+ )
+ await this.driver.sleep(100)
+ }
+})
+
+When('add data to {string} table on {string} wizard with several inputs', async function (table, wizard, dataTable) {
+ const inputFields = dataTable['rawTable'][0]
+ const rows = dataTable.rows()
+ for (const row_indx in rows) {
+ await clickOnComponent(this.driver, pageObjects[wizard][table]['add_row_btn'])
+ await this.driver.sleep(100)
+ await clickOnComponent(
+ this.driver,
+ pageObjects[wizard][table]['tableFields'][inputFields[0]](parseInt(row_indx) + 2)
+ )
+ await this.driver.sleep(250)
+ await typeIntoInputField(
+ this.driver,
+ pageObjects[wizard][table]['tableFields'][inputFields[0]](parseInt(row_indx) + 2),
+ rows[row_indx][0]
+ )
+ await this.driver.sleep(100)
+ await openDropdown(
+ this.driver,
+ pageObjects[wizard][table]['tableFields'][inputFields[1]](parseInt(row_indx) + 2)
+ )
+ await selectOptionInDropdownWithoutCheck(
+ this.driver,
+ pageObjects[wizard][table]['tableFields'][inputFields[1]](parseInt(row_indx) + 2),
+ rows[row_indx][1]
+ )
+ await this.driver.sleep(100)
+ await typeIntoInputField(
+ this.driver,
+ pageObjects[wizard][table]['tableFields'][inputFields[2]](parseInt(row_indx) + 2),
+ rows[row_indx][2]
+ )
+ await this.driver.sleep(100)
+ if (rows[row_indx][3].length !== 0){
+ await typeIntoInputField(
+ this.driver,
+ pageObjects[wizard][table]['tableFields'][inputFields[3]](parseInt(row_indx) + 2),
+ rows[row_indx][3]
+ )
+ await this.driver.sleep(100)
+ }
+ await hoverComponent(
+ this.driver,
+ pageObjects[wizard][table]['tableFields']['apply_btn'](parseInt(row_indx) + 2)
+ )
+ await this.driver.sleep(100)
+ await clickOnComponent(
+ this.driver,
+ pageObjects[wizard][table]['tableFields']['apply_btn'](parseInt(row_indx) + 2)
+ )
+ await this.driver.sleep(100)
+ }
+})
+
+When('fill data to {string} table on {string} wizard', async function (table, wizard, dataTable) {
+ const inputFields = dataTable['rawTable'][0]
+ const rows = dataTable.rows()
+ for (const row_indx in rows) {
+ await clickOnComponent(this.driver, pageObjects[wizard][table]['add_row_btn'])
+ await this.driver.sleep(100)
+ await clickOnComponent(this.driver, pageObjects[wizard][table]['tableFields'][inputFields[0]](parseInt(row_indx) + 3))
+ await this.driver.sleep(250)
+ await typeIntoInputField(
+ this.driver,
+ pageObjects[wizard][table]['tableFields'][inputFields[0]](parseInt(row_indx) + 3),
+ rows[row_indx][0]
+ )
+ await this.driver.sleep(100)
+ await openDropdown(this.driver, pageObjects[wizard][table]['tableFields'][inputFields[1]](parseInt(row_indx) + 3))
+ await selectOptionInDropdownWithoutCheck(
+ this.driver,
+ pageObjects[wizard][table]['tableFields'][inputFields[1]](parseInt(row_indx) + 3),
+ rows[row_indx][1]
+ )
+ await this.driver.sleep(100)
+ await typeIntoInputField(
+ this.driver,
+ pageObjects[wizard][table]['tableFields'][inputFields[2]](parseInt(row_indx) + 3),
+ rows[row_indx][2]
+ )
+ await this.driver.sleep(250)
+ await hoverComponent(this.driver, pageObjects[wizard][table]['tableFields']['apply_btn'](parseInt(row_indx) + 3))
+ await this.driver.sleep(100)
+ await clickOnComponent(this.driver, pageObjects[wizard][table]['tableFields']['apply_btn'](parseInt(row_indx) + 3))
+ await this.driver.sleep(100)
+ }
+})
When(
'add rows to {string} key-value table on {string} wizard',
async function (table, wizard, dataTable) {
@@ -185,6 +370,57 @@ Then(
}
)
+Then(
+ 'verify data in {string} table on {string} wizard',
+ async function (table, wizard, dataTable) {
+ const columns = dataTable['rawTable'][0]
+ const rows = dataTable.rows()
+ for (const row_indx in rows) {
+ for (const i in columns) {
+ await verifyText(
+ this.driver,
+ pageObjects[wizard][table]['tableFields'][columns[i]](parseInt(row_indx) + 2),
+ rows[row_indx][i]
+ )
+ }
+ }
+ }
+)
+
+Then(
+ 'verify filled data in {string} table on {string} wizard',
+ async function (table, wizard, dataTable) {
+ const columns = dataTable['rawTable'][0]
+ const rows = dataTable.rows()
+ for (const row_indx in rows) {
+ for (const i in columns) {
+ await verifyText(
+ this.driver,
+ pageObjects[wizard][table]['tableFields'][columns[i]](parseInt(row_indx) + 3),
+ rows[row_indx][i]
+ )
+ }
+ }
+ }
+)
+
+Then(
+ 'verify values in {string} table on {string} wizard with attribute',
+ async function (table, wizard, dataTable) {
+ const columns = dataTable['rawTable'][0]
+ const rows = dataTable.rows()
+ for (const row_indx in rows) {
+ for (const i in columns) {
+ await verifyTypedText (
+ this.driver,
+ pageObjects[wizard][table]['tableFields'][columns[i]](parseInt(row_indx) + 1),
+ rows[row_indx][i]
+ )
+ }
+ }
+ }
+)
+
When(
'click on {string} in {string} table on {string} wizard with offset {string}',
async function (fieldName, tableName, wizardName, offsetFlag, dataTable) {
@@ -215,6 +451,66 @@ When(
}
)
+When(
+ 'click on {string} with data in {string} table on {string} wizard with offset {string}',
+ async function (fieldName, tableName, wizardName, offsetFlag, dataTable) {
+ const column = dataTable['rawTable'][0][0]
+ const rows = dataTable.rows()
+ for (const row_indx in rows) {
+ const arr = await findRowIndexesByColumnValue(
+ this.driver,
+ pageObjects[wizardName][tableName],
+ column,
+ rows[row_indx][0]
+ )
+
+ let indx = arr[0]
+ if (offsetFlag === 'true') {
+ indx -= pageObjects[wizardName][tableName].offset
+ }
+
+ await hoverComponent(
+ this.driver,
+ pageObjects[wizardName][tableName]['tableFields'][fieldName](indx + 1)
+ )
+ await clickOnComponent(
+ this.driver,
+ pageObjects[wizardName][tableName]['tableFields'][fieldName](indx + 1)
+ )
+ }
+ }
+)
+
+When(
+ 'click on {string} with filled data in {string} table on {string} wizard with offset {string}',
+ async function (fieldName, tableName, wizardName, offsetFlag, dataTable) {
+ const column = dataTable['rawTable'][0][0]
+ const rows = dataTable.rows()
+ for (const row_indx in rows) {
+ const arr = await findRowIndexesByColumnValue(
+ this.driver,
+ pageObjects[wizardName][tableName],
+ column,
+ rows[row_indx][0]
+ )
+
+ let indx = arr[0]
+ if (offsetFlag === 'true') {
+ indx -= pageObjects[wizardName][tableName].offset
+ }
+
+ await hoverComponent(
+ this.driver,
+ pageObjects[wizardName][tableName]['tableFields'][fieldName](indx + 2)
+ )
+ await clickOnComponent(
+ this.driver,
+ pageObjects[wizardName][tableName]['tableFields'][fieldName](indx + 2)
+ )
+ }
+ }
+)
+
When(
'add rows to {string} table in {string} on {string} wizard',
async function (table, accordion, wizard, dataTable) {
@@ -272,6 +568,81 @@ When(
}
)
+When(
+ 'add data rows to {string} key-value table in {string} on {string} wizard',
+ async function (table, accordion, wizard, dataTable) {
+ const inputFields = dataTable['rawTable'][0]
+ const rows = dataTable.rows()
+ for (const row_indx in rows) {
+ await clickOnComponent(this.driver, pageObjects[wizard][accordion][table]['add_row_btn'])
+ await this.driver.sleep(100)
+ for (const i in inputFields) {
+ const component = pageObjects[wizard][accordion][table]['tableFields'][inputFields[i]](parseInt(row_indx) + 2)
+ const inputField = component.inputField ?? component
+ await typeIntoInputField(this.driver, inputField, rows[row_indx][i])
+ }
+
+ if (pageObjects[wizard][accordion][table]['save_row_btn']) {
+ await clickOnComponent(this.driver, pageObjects[wizard][accordion][table]['save_row_btn'])
+ } else {
+ await hoverComponent(this.driver, pageObjects[wizard][accordion][table]['tableFields']['apply_edit_btn'](parseInt(row_indx) + 2))
+ await this.driver.sleep(100)
+ await clickOnComponent(this.driver, pageObjects[wizard][accordion][table]['tableFields']['apply_edit_btn'](parseInt(row_indx) + 2))
+ await this.driver.sleep(100)
+ }
+
+ await this.driver.sleep(100)
+ }
+ }
+)
+
+When(
+ 'edit dropdown field {int} row in {string} key-value table on {string} wizard',
+ async function (index, table, wizard, dataTable) {
+ const inputFields = dataTable['rawTable'][0]
+ const row = dataTable.rows()[0]
+ await hoverComponent(
+ this.driver,
+ pageObjects[wizard][table]['tableFields']['edit_btn'](index + 1)
+ )
+ await clickOnComponent(
+ this.driver,
+ pageObjects[wizard][table]['tableFields']['edit_btn'](index + 1)
+ )
+ await openDropdown(
+ this.driver,
+ pageObjects[wizard][table]['tableFields'][inputFields[0]](index + 1)
+ )
+ await selectOptionInDropdownWithoutCheck(
+ this.driver,
+ pageObjects[wizard][table]['tableFields'][inputFields[0]](index + 1),
+ row[0]
+ )
+ await this.driver.sleep(100)
+ await typeIntoInputField(
+ this.driver,
+ pageObjects[wizard][table]['tableFields'][inputFields[1]](index + 1),
+ row[1]
+ )
+ await this.driver.sleep(100)
+ await typeIntoInputField(
+ this.driver,
+ pageObjects[wizard][table]['tableFields'][inputFields[2]](index + 1),
+ row[2]
+ )
+ await this.driver.sleep(100)
+ await hoverComponent(
+ this.driver,
+ pageObjects[wizard][table]['tableFields']['apply_btn'](index + 1)
+ )
+ await clickOnComponent(
+ this.driver,
+ pageObjects[wizard][table]['tableFields']['apply_btn'](index + 1)
+ )
+ await this.driver.sleep(100)
+ }
+)
+
When(
'edit {int} row in {string} key-value table in {string} on {string} wizard',
async function (index, table, accordion, wizard, dataTable) {
@@ -299,6 +670,64 @@ When(
}
)
+When(
+ 'edit {int} row in {string} key-value table on {string} wizard',
+ async function (index, table, wizard, dataTable) {
+ const inputFields = dataTable['rawTable'][0]
+ const row = dataTable.rows()[0]
+ await hoverComponent(
+ this.driver,
+ pageObjects[wizard][table]['tableFields']['edit_btn'](index + 1)
+ )
+ await clickOnComponent(
+ this.driver,
+ pageObjects[wizard][table]['tableFields']['edit_btn'](index + 1)
+ )
+ for (const i in inputFields) {
+ await typeIntoInputField(
+ this.driver,
+ pageObjects[wizard][table]['tableFields'][inputFields[i]](index + 1),
+ row[i]
+ )
+ await this.driver.sleep(100)
+ }
+ await clickOnComponent(
+ this.driver,
+ pageObjects[wizard][table]['tableFields']['apply_btn'](index + 1)
+ )
+ await this.driver.sleep(100)
+ }
+)
+
+When(
+ 'edit {int} filled row in {string} key-value table on {string} wizard',
+ async function (index, table, wizard, dataTable) {
+ const inputFields = dataTable['rawTable'][0]
+ const row = dataTable.rows()[0]
+ await hoverComponent(
+ this.driver,
+ pageObjects[wizard][table]['tableFields']['edit_btn'](index + 2)
+ )
+ await clickOnComponent(
+ this.driver,
+ pageObjects[wizard][table]['tableFields']['edit_btn'](index + 2)
+ )
+ for (const i in inputFields) {
+ await typeIntoInputField(
+ this.driver,
+ pageObjects[wizard][table]['tableFields'][inputFields[i]](index + 2),
+ row[i]
+ )
+ await this.driver.sleep(100)
+ }
+ await clickOnComponent(
+ this.driver,
+ pageObjects[wizard][table]['tableFields']['apply_btn'](index + 2)
+ )
+ await this.driver.sleep(100)
+ }
+)
+
Then(
'verify values in {string} table in {string} on {string} wizard',
async function (table, accordion, wizard, dataTable) {
@@ -315,6 +744,22 @@ Then(
}
}
)
+Then(
+ 'verify data values in {string} table in {string} on {string} wizard',
+ async function (table, accordion, wizard, dataTable) {
+ const columns = dataTable['rawTable'][0]
+ const rows = dataTable.rows()
+ for (const row_indx in rows) {
+ for (const i in columns) {
+ await verifyText(
+ this.driver,
+ pageObjects[wizard][accordion][table]['tableFields'][columns[i]](parseInt(row_indx) + 2),
+ rows[row_indx][i]
+ )
+ }
+ }
+ }
+)
When(
'click on {string} in {string} table in {string} on {string} wizard',
@@ -367,6 +812,32 @@ When(
}
)
+When(
+ 'click on {string} in {string} table on {string} wizard with attribute',
+ async function (field, tableName, wizardName, dataTable) {
+ const column = dataTable['rawTable'][0][0]
+ const rows = dataTable.rows()
+ for (const row_indx in rows) {
+ const arr = await findRowIndexesByColumnValueAttribute(
+ this.driver,
+ pageObjects[wizardName][tableName],
+ column,
+ rows[row_indx][0]
+ )
+ const indx = arr[0] - pageObjects[wizardName][tableName].offset
+ await hoverComponent(
+ this.driver,
+ pageObjects[wizardName][tableName]['tableFields'][field](indx),
+ false
+ )
+ await clickOnComponent(
+ this.driver,
+ pageObjects[wizardName][tableName]['tableFields'][field](indx)
+ )
+ }
+ }
+)
+
When(
'click on {string} in {string} table in {string} on {string} wizard with offset {string}',
async function (field, tableName, accordionName, wizardName, offsetFlag, dataTable) {
@@ -396,9 +867,43 @@ When(
}
)
+Then(
+ 'value in {string} column with {string} in {string} on {string} wizard should contains {string} in {string}',
+ async function (column, type, table, wizard, substring, overlay) {
+ if (type === 'dropdowns') {
+ await isContainsSubstringInColumnDropdownCellsOverlay(
+ this.driver,
+ pageObjects[wizard][table],
+ pageObjects[wizard][overlay],
+ column,
+ substring
+ )
+ }
+ }
+)
+
+Then(
+ 'verify {string} on {string} wizard should contains {string} value',
+ async function(componentName, wizardName, value) {
+ await verifyComponentContainsAttributeValue(
+ this.driver,
+ pageObjects[wizardName][componentName],
+ 'value',
+ value
+ )
+})
+
Then(
'value in {string} column with {string} in {string} on {string} wizard should contains {string}',
async function (column, type, table, wizard, substring) {
+ if (type === 'attribute') {
+ await isContainsSubstringInColumnAttributrCells(
+ this.driver,
+ pageObjects[wizard][table],
+ column,
+ substring
+ )
+ }
if (type === 'text') {
await isContainsSubstringInColumnCells(
this.driver,
@@ -671,6 +1176,7 @@ When(
if (pageComponents[indx].includes('Button')) {
if (row[indx] === 'yes') {
+ await hoverComponent(this.driver, pageObjects[wizardName][accordionName][pageComponents[indx]], false)
await clickOnComponent(
this.driver,
pageObjects[wizardName][accordionName][pageComponents[indx]]
diff --git a/tests/features/support/world.js b/tests/features/support/world.js
index eac135b45..41cfcee6f 100644
--- a/tests/features/support/world.js
+++ b/tests/features/support/world.js
@@ -40,14 +40,15 @@ class CustomWorld extends World {
let browseConfigs
+ //browseConfigs = new chrome.Options().windowSize(screen_size) - can be used to define a specific screen size
if (browser === 'chrome') {
if (headless) {
browseConfigs = new chrome.Options()
.headless()
.addArguments('no-sandbox')
+ .addArguments('start-maximized')
.addArguments('disable-gpu')
- .windowSize(screen_size)
- } else browseConfigs = new chrome.Options().windowSize(screen_size)
+ } else browseConfigs = new chrome.Options().addArguments('start-maximized')
}
if (browser === 'firefox') {
if (headless) {
diff --git a/tests/mockServer/data/artifacts.json b/tests/mockServer/data/artifacts.json
index d6111b468..cc33407c9 100644
--- a/tests/mockServer/data/artifacts.json
+++ b/tests/mockServer/data/artifacts.json
@@ -34768,6 +34768,50 @@
"updated": "2021-10-21T05:51:38.324826+00:00",
"db_key": "lala001",
"tag": "latest"
+ },
+ {
+ "kind": "dataset",
+ "metadata": {
+ "labels": {},
+ "key": "test_new_structure",
+ "project": "default",
+ "tree": "5a44b12b-9ef3-4239-87e8-e0cbdae5827c",
+ "updated": "2023-09-20T15:45:58.042Z",
+ "tag": "latest"
+ },
+ "project": "default",
+ "spec": {
+ "db_key": "test_new_structure",
+ "producer": {
+ "kind": "api",
+ "uri": "localhost:3000"
+ },
+ "target_path": "v3io:///ted/tfr"
+ },
+ "status": {},
+ "uid": "5a44b12b-9ef3-4239-87e8-e0cbdae5827c"
+ },
+ {
+ "kind": "dataset",
+ "metadata": {
+ "labels": {},
+ "key": "test_new_structure2",
+ "project": "default",
+ "tree": "5a44b12b-9ef3-4239-87e8-e0cbdae5828c",
+ "updated": "2023-09-20T15:45:58.042Z",
+ "tag": "latest"
+ },
+ "project": "default",
+ "spec": {
+ "db_key": "test_new_structure2",
+ "producer": {
+ "kind": "api",
+ "uri": "localhost:3000"
+ },
+ "target_path": "v3io:///ted/tfr"
+ },
+ "status": {},
+ "uid": "5a44b12b-9ef3-4239-87e8-e0cbdae5828c"
}
]
}
diff --git a/tests/mockServer/data/hubItemInference.json b/tests/mockServer/data/hubItemInference.json
new file mode 100644
index 000000000..de50b08d3
--- /dev/null
+++ b/tests/mockServer/data/hubItemInference.json
@@ -0,0 +1,53 @@
+{
+ "kind": "HubItem",
+ "metadata": {
+ "name": "batch-inference",
+ "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.",
+ "labels": {
+ "author": "guyl"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.4.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "batch_inference.ipynb",
+ "mlrunVersion": "1.2.0",
+ "categories": [
+ "utils"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/batch_inference/latest/",
+ "assets": {
+ "example": "src/batch_inference.ipynb",
+ "source": "src/batch_inference.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "batch_inference.py",
+ "requirements": null,
+ "image": "mlrun/mlrun",
+ "handler": "infer",
+ "kind": "job",
+ "extra_spec": {
+ "allow_empty_resources": true,
+ "build": {
+ "auto_build": false,
+ "with_mlrun": false
+ }
+ }
+ },
+ "status": {
+ "state": null
+ }
+}
\ No newline at end of file
diff --git a/tests/mockServer/data/itemsCatalog.json b/tests/mockServer/data/itemsCatalog.json
new file mode 100644
index 000000000..26b474c6c
--- /dev/null
+++ b/tests/mockServer/data/itemsCatalog.json
@@ -0,0 +1,12220 @@
+{
+ "kind": "HubCatalog",
+ "channel": "master",
+ "catalog": [
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "tf2-serving",
+ "description": "tf2 image classification server",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "tf2_serving.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/tf2_serving/latest/",
+ "assets": {
+ "example": "src/tf2_serving.ipynb",
+ "source": "src/tf2_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "tf2_serving.py",
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "requirements": [
+ "requests",
+ "pillow",
+ "tensorflow>=2.1"
+ ],
+ "kind": "nuclio:serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "tf2-serving",
+ "description": "tf2 image classification server",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "tf2_serving.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-05-19:23-13",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/tf2_serving/0.0.1/",
+ "assets": {
+ "example": "src/tf2_serving.ipynb",
+ "source": "src/tf2_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "tf2_serving.py",
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "requirements": [
+ "requests",
+ "pillow",
+ "tensorflow>=2.1"
+ ],
+ "kind": "nuclio:serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "tf2-serving",
+ "description": "tf2 image classification server",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.1",
+ "tag": "0.9.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "tf2_serving.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/tf2_serving/0.9.1/",
+ "assets": {
+ "example": "src/tf2_serving.ipynb",
+ "source": "src/tf2_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "tf2_serving.py",
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "requirements": [
+ "requests",
+ "pillow",
+ "tensorflow>=2.1"
+ ],
+ "kind": "nuclio:serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "tf2-serving",
+ "description": "tf2 image classification server",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "tf2_serving.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/tf2_serving/0.9.0/",
+ "assets": {
+ "example": "src/tf2_serving.ipynb",
+ "source": "src/tf2_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "tf2_serving.py",
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "requirements": [
+ "requests",
+ "pillow",
+ "tensorflow>=2.1"
+ ],
+ "kind": "nuclio:serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "tf2-serving",
+ "description": "tf2 image classification server",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "tf2_serving.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/tf2_serving/0.8.0/",
+ "assets": {
+ "example": "src/tf2_serving.ipynb",
+ "source": "src/tf2_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "tf2_serving.py",
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "requirements": [
+ "requests",
+ "pillow",
+ "tensorflow>=2.1"
+ ],
+ "kind": "nuclio:serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "tf2-serving",
+ "description": "tf2 image classification server",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "tf2_serving.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/tf2_serving/1.1.0/",
+ "assets": {
+ "example": "src/tf2_serving.ipynb",
+ "source": "src/tf2_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "tf2_serving.py",
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "requirements": [
+ "requests",
+ "pillow",
+ "tensorflow>=2.1"
+ ],
+ "kind": "nuclio:serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "load-dask",
+ "description": "load dask cluster with data",
+ "labels": {
+ "author": "yjb"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "load_dask.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-preparation",
+ "etl"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/load_dask/latest/",
+ "assets": {
+ "example": "src/load_dask.ipynb",
+ "source": "src/load_dask.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "load_dask.py",
+ "image": "mlrun/ml-models",
+ "handler": "load_dask",
+ "requirements": [],
+ "kind": "dask"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "load-dask",
+ "description": "load dask cluster with data",
+ "labels": {
+ "author": "yjb"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "load_dask.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "data-preparation",
+ "etl"
+ ],
+ "generationDate": "2021-05-19:23-13",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/load_dask/0.0.1/",
+ "assets": {
+ "example": "src/load_dask.ipynb",
+ "source": "src/load_dask.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "load_dask.py",
+ "image": "mlrun/ml-models",
+ "handler": "load_dask",
+ "requirements": [],
+ "kind": "dask"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "load-dask",
+ "description": "load dask cluster with data",
+ "labels": {
+ "author": "yjb"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "load_dask.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "data-preparation",
+ "etl"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/load_dask/0.9.0/",
+ "assets": {
+ "example": "src/load_dask.ipynb",
+ "source": "src/load_dask.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "load_dask.py",
+ "image": "mlrun/ml-models",
+ "handler": "load_dask",
+ "requirements": [],
+ "kind": "dask"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "load-dask",
+ "description": "load dask cluster with data",
+ "labels": {
+ "author": "yjb"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "load_dask.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "data-preparation",
+ "etl"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/load_dask/0.8.0/",
+ "assets": {
+ "example": "src/load_dask.ipynb",
+ "source": "src/load_dask.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "load_dask.py",
+ "image": "mlrun/ml-models",
+ "handler": "load_dask",
+ "requirements": [],
+ "kind": "dask"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "load-dask",
+ "description": "load dask cluster with data",
+ "labels": {
+ "author": "yjb"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "load_dask.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-preparation",
+ "etl"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/load_dask/1.1.0/",
+ "assets": {
+ "example": "src/load_dask.ipynb",
+ "source": "src/load_dask.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "load_dask.py",
+ "image": "mlrun/ml-models",
+ "handler": "load_dask",
+ "requirements": [],
+ "kind": "dask"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "xgb-serving",
+ "description": "deploy an XGBoost model server.",
+ "labels": {
+ "author": "Daniel"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "xgb_serving.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/xgb_serving/latest/",
+ "assets": {
+ "example": "src/xgb_serving.ipynb",
+ "source": "src/xgb_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "xgb_serving.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": [],
+ "kind": "remote"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "xgb-serving",
+ "description": "deploy an XGBoost model server.",
+ "labels": {
+ "author": "Daniel"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.0.0",
+ "example": "xgb_serving.ipynb",
+ "mlrunVersion": "0.6.2",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-05-19:23-13",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/xgb_serving/0.0.1/",
+ "assets": {
+ "example": "src/xgb_serving.ipynb",
+ "source": "src/xgb_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "xgb_serving.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": [],
+ "kind": "remote"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "xgb-serving",
+ "description": "deploy an XGBoost model server.",
+ "labels": {
+ "author": "Daniel"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "xgb_serving.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/xgb_serving/0.9.0/",
+ "assets": {
+ "example": "src/xgb_serving.ipynb",
+ "source": "src/xgb_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "xgb_serving.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": [],
+ "kind": "remote"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "xgb-serving",
+ "description": "deploy an XGBoost model server.",
+ "labels": {
+ "author": "Daniel"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.0.0",
+ "tag": "1.0.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "xgb_serving.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/xgb_serving/1.0.0/",
+ "assets": {
+ "example": "src/xgb_serving.ipynb",
+ "source": "src/xgb_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "xgb_serving.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": [],
+ "kind": "remote"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "xgb-serving",
+ "description": "deploy an XGBoost model server.",
+ "labels": {
+ "author": "Daniel"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "xgb_serving.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/xgb_serving/0.8.0/",
+ "assets": {
+ "example": "src/xgb_serving.ipynb",
+ "source": "src/xgb_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "xgb_serving.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": [],
+ "kind": "remote"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "xgb-serving",
+ "description": "deploy an XGBoost model server.",
+ "labels": {
+ "author": "Daniel"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "xgb_serving.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/xgb_serving/1.1.0/",
+ "assets": {
+ "example": "src/xgb_serving.ipynb",
+ "source": "src/xgb_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "xgb_serving.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": [],
+ "kind": "remote"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "sql-to-file",
+ "description": "SQL To File - Ingest data using SQL query",
+ "labels": {
+ "author": "adih"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "sql_to_file.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-preparation"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/sql_to_file/latest/",
+ "assets": {
+ "example": "src/sql_to_file.ipynb",
+ "source": "src/sql_to_file.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "sql_to_file.py",
+ "image": "mlrun/mlrun",
+ "handler": "sql_to_file",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "sql-to-file",
+ "description": "SQL To File - Ingest data using SQL query",
+ "labels": {
+ "author": "adih"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "sql_to_file.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "data-preparation"
+ ],
+ "generationDate": "2021-05-19:23-13",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/sql_to_file/0.0.1/",
+ "assets": {
+ "example": "src/sql_to_file.ipynb",
+ "source": "src/sql_to_file.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "sql_to_file.py",
+ "image": "mlrun/mlrun",
+ "handler": "sql_to_file",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "sql-to-file",
+ "description": "SQL To File - Ingest data using SQL query",
+ "labels": {
+ "author": "adih"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.1",
+ "tag": "0.9.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "sql_to_file.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "data-preparation"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/sql_to_file/0.9.1/",
+ "assets": {
+ "example": "src/sql_to_file.ipynb",
+ "source": "src/sql_to_file.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "sql_to_file.py",
+ "image": "mlrun/mlrun",
+ "handler": "sql_to_file",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "sql-to-file",
+ "description": "SQL To File - Ingest data using SQL query",
+ "labels": {
+ "author": "adih"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "sql_to_file.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "data-preparation"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/sql_to_file/0.9.0/",
+ "assets": {
+ "example": "src/sql_to_file.ipynb",
+ "source": "src/sql_to_file.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "sql_to_file.py",
+ "image": "mlrun/mlrun",
+ "handler": "sql_to_file",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "sql-to-file",
+ "description": "SQL To File - Ingest data using SQL query",
+ "labels": {
+ "author": "adih"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "sql_to_file.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "data-preparation"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/sql_to_file/0.8.0/",
+ "assets": {
+ "example": "src/sql_to_file.ipynb",
+ "source": "src/sql_to_file.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "sql_to_file.py",
+ "image": "mlrun/mlrun",
+ "handler": "sql_to_file",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "sql-to-file",
+ "description": "SQL To File - Ingest data using SQL query",
+ "labels": {
+ "author": "adih"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "sql_to_file.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-preparation"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/sql_to_file/1.1.0/",
+ "assets": {
+ "example": "src/sql_to_file.ipynb",
+ "source": "src/sql_to_file.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "sql_to_file.py",
+ "image": "mlrun/mlrun",
+ "handler": "sql_to_file",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "feature-selection",
+ "description": "Select features through multiple Statistical and Model filters",
+ "labels": {
+ "author": "orz"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.2.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "feature_selection.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-preparation",
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/feature_selection/latest/",
+ "assets": {
+ "example": "src/feature_selection.ipynb",
+ "source": "src/feature_selection.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "feature_selection.py",
+ "image": "mlrun/ml-models",
+ "handler": "feature_selection",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "feature-selection",
+ "description": "Select features through multiple Statistical and Model filters",
+ "labels": {
+ "author": "orz"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "2.10.0",
+ "example": "feature_selection.ipynb",
+ "mlrunVersion": "0.5.4",
+ "categories": [
+ "data-preparation",
+ "machine-learning"
+ ],
+ "generationDate": "2021-05-19:22-41",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/feature_selection/0.0.1/",
+ "assets": {
+ "example": "src/feature_selection.ipynb",
+ "source": "src/feature_selection.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "feature_selection.py",
+ "image": "mlrun/ml-models",
+ "handler": "feature_selection/feature_selection",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "feature-selection",
+ "description": "Select features through multiple Statistical and Model filters",
+ "labels": {
+ "author": "orz"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.1",
+ "tag": "0.9.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "feature_selection.ipynb",
+ "mlrunVersion": "0.9.0",
+ "categories": [
+ "data-preparation",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/feature_selection/0.9.1/",
+ "assets": {
+ "example": "src/feature_selection.ipynb",
+ "source": "src/feature_selection.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "feature_selection.py",
+ "image": "mlrun/ml-models",
+ "handler": "feature_selection",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "feature-selection",
+ "description": "Select features through multiple Statistical and Model filters",
+ "labels": {
+ "author": "orz"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.1",
+ "tag": "1.1.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "feature_selection.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-preparation",
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/feature_selection/1.1.1/",
+ "assets": {
+ "example": "src/feature_selection.ipynb",
+ "source": "src/feature_selection.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "feature_selection.py",
+ "image": "mlrun/ml-models",
+ "handler": "feature_selection",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "feature-selection",
+ "description": "Select features through multiple Statistical and Model filters",
+ "labels": {
+ "author": "orz"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "feature_selection.ipynb",
+ "mlrunVersion": "0.9.0",
+ "categories": [
+ "data-preparation",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/feature_selection/0.9.0/",
+ "assets": {
+ "example": "src/feature_selection.ipynb",
+ "source": "src/feature_selection.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "feature_selection.py",
+ "image": "mlrun/ml-models",
+ "handler": "feature_selection/feature_selection",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "feature-selection",
+ "description": "Select features through multiple Statistical and Model filters",
+ "labels": {
+ "author": "orz"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.2.0",
+ "tag": "1.2.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "feature_selection.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-preparation",
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/feature_selection/1.2.0/",
+ "assets": {
+ "example": "src/feature_selection.ipynb",
+ "source": "src/feature_selection.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "feature_selection.py",
+ "image": "mlrun/ml-models",
+ "handler": "feature_selection",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "feature-selection",
+ "description": "Select features through multiple Statistical and Model filters",
+ "labels": {
+ "author": "orz"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "feature_selection.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "data-preparation",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/feature_selection/0.8.0/",
+ "assets": {
+ "example": "src/feature_selection.ipynb",
+ "source": "src/feature_selection.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "feature_selection.py",
+ "image": "mlrun/ml-models",
+ "handler": "feature_selection/feature_selection",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "feature-selection",
+ "description": "Select features through multiple Statistical and Model filters",
+ "labels": {
+ "author": "orz"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "example": "feature_selection.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-preparation",
+ "machine-learning"
+ ],
+ "generationDate": "2022-08-28:17-25",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/feature_selection/1.1.0/",
+ "assets": {
+ "example": "src/feature_selection.ipynb",
+ "source": "src/feature_selection.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "feature_selection.py",
+ "image": "mlrun/ml-models",
+ "handler": "feature_selection",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "slack-notify",
+ "description": "Send Slack notification",
+ "labels": {
+ "author": "mdl"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "slack_notify.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "utils"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/slack_notify/latest/",
+ "assets": {
+ "example": "src/slack_notify.ipynb",
+ "source": "src/slack_notify.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "slack_notify.py",
+ "image": "python:3.6-jessie",
+ "handler": "slack_notify",
+ "requirements": [
+ "requests"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "slack-notify",
+ "description": "Send Slack notification",
+ "labels": {
+ "author": "mdl"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "slack_notify.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "utils"
+ ],
+ "generationDate": "2021-05-19:23-13",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/slack_notify/0.0.1/",
+ "assets": {
+ "example": "src/slack_notify.ipynb",
+ "source": "src/slack_notify.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "slack_notify.py",
+ "image": "python:3.6-jessie",
+ "handler": "slack_notify",
+ "requirements": [
+ "requests"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "slack-notify",
+ "description": "Send Slack notification",
+ "labels": {
+ "author": "mdl"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "slack_notify.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "utils"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/slack_notify/0.9.0/",
+ "assets": {
+ "example": "src/slack_notify.ipynb",
+ "source": "src/slack_notify.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "slack_notify.py",
+ "image": "python:3.6-jessie",
+ "handler": "slack_notify",
+ "requirements": [
+ "requests"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "slack-notify",
+ "description": "Send Slack notification",
+ "labels": {
+ "author": "mdl"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "slack_notify.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "utils"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/slack_notify/0.8.0/",
+ "assets": {
+ "example": "src/slack_notify.ipynb",
+ "source": "src/slack_notify.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "slack_notify.py",
+ "image": "python:3.6-jessie",
+ "handler": "slack_notify",
+ "requirements": [
+ "requests"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "slack-notify",
+ "description": "Send Slack notification",
+ "labels": {
+ "author": "mdl"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "slack_notify.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "utils"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/slack_notify/1.1.0/",
+ "assets": {
+ "example": "src/slack_notify.ipynb",
+ "source": "src/slack_notify.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "slack_notify.py",
+ "image": "python:3.6-jessie",
+ "handler": "slack_notify",
+ "requirements": [
+ "requests"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "model-server",
+ "description": "generic sklearn model server",
+ "labels": {
+ "author": "yaronh",
+ "framework": "sklearn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "model_server.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/model_server/latest/",
+ "assets": {
+ "example": "src/model_server.ipynb",
+ "source": "src/model_server.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "model_server.py",
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "requirements": [],
+ "kind": "nuclio:serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "model-server",
+ "description": "generic sklearn model server",
+ "labels": {
+ "author": "yaronh",
+ "framework": "sklearn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "model_server.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-05-19:23-13",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/model_server/0.0.1/",
+ "assets": {
+ "example": "src/model_server.ipynb",
+ "source": "src/model_server.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "model_server.py",
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "requirements": [],
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "model-server",
+ "description": "generic sklearn model server",
+ "labels": {
+ "author": "yaronh",
+ "framework": "sklearn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "model_server.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/model_server/0.9.0/",
+ "assets": {
+ "example": "src/model_server.ipynb",
+ "source": "src/model_server.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "model_server.py",
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "requirements": [],
+ "kind": "nuclio:serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "model-server",
+ "description": "generic sklearn model server",
+ "labels": {
+ "author": "yaronh",
+ "framework": "sklearn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.0.0",
+ "tag": "1.0.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "model_server.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/model_server/1.0.0/",
+ "assets": {
+ "example": "src/model_server.ipynb",
+ "source": "src/model_server.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "model_server.py",
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "requirements": [],
+ "kind": "nuclio:serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "model-server",
+ "description": "generic sklearn model server",
+ "labels": {
+ "author": "yaronh",
+ "framework": "sklearn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "model_server.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/model_server/0.8.0/",
+ "assets": {
+ "example": "src/model_server.ipynb",
+ "source": "src/model_server.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "model_server.py",
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "requirements": [],
+ "kind": "nuclio:serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "model-server",
+ "description": "generic sklearn model server",
+ "labels": {
+ "author": "yaronh",
+ "framework": "sklearn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "model_server.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/model_server/1.1.0/",
+ "assets": {
+ "example": "src/model_server.ipynb",
+ "source": "src/model_server.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "model_server.py",
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "requirements": [],
+ "kind": "nuclio:serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "ingest",
+ "description": "Feature Store ingest function that runs the transformation graph on the source of the featureset.",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "ingest.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-preparation",
+ "data-analysis",
+ "feature-store"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/ingest/latest/",
+ "assets": {
+ "example": "src/ingest.ipynb",
+ "source": "src/ingest.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "ingest.py",
+ "image": "mlrun/mlrun",
+ "handler": "ingest",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "ingest",
+ "description": "Feature Store ingest function that runs the transformation graph on the source of the featureset.",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "ingest.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "data-preparation",
+ "data-analysis",
+ "feature-store"
+ ],
+ "generationDate": "2021-11-13:00-15",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/ingest/0.9.0/",
+ "assets": {
+ "example": "src/ingest.ipynb",
+ "source": "src/ingest.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "ingest.py",
+ "image": "mlrun/mlrun",
+ "handler": "ingest",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "ingest",
+ "description": "Feature Store ingest function that runs the transformation graph on the source of the featureset.",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "ingest.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-preparation",
+ "data-analysis",
+ "feature-store"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/ingest/1.1.0/",
+ "assets": {
+ "example": "src/ingest.ipynb",
+ "source": "src/ingest.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "ingest.py",
+ "image": "mlrun/mlrun",
+ "handler": "ingest",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "describe",
+ "description": "describe and visualizes dataset stats",
+ "labels": {
+ "author": "Davids"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "describe.ipynb",
+ "mlrunVersion": "1.2.0",
+ "categories": [
+ "data-analysis"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/describe/latest/",
+ "assets": {
+ "example": "src/describe.ipynb",
+ "source": "src/describe.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "describe.py",
+ "image": "mlrun/mlrun",
+ "handler": "analyze",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "describe",
+ "description": "describe and visualizes dataset stats",
+ "labels": {
+ "author": "Iguazio"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "2.10.0",
+ "example": "describe.ipynb",
+ "mlrunVersion": "0.5.4",
+ "categories": [
+ "data-analysis"
+ ],
+ "generationDate": "2021-05-19:22-41",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/describe/0.0.1/",
+ "assets": {
+ "example": "src/describe.ipynb",
+ "source": "src/describe.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "describe.py",
+ "image": "mlrun/mlrun",
+ "handler": "summarize",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "describe",
+ "description": "describe and visualizes dataset stats",
+ "labels": {
+ "author": "Davids"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.1",
+ "tag": "0.9.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "describe.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "data-analysis"
+ ],
+ "generationDate": "2022-04-07:14-20",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/describe/0.9.1/",
+ "assets": {
+ "example": "src/describe.ipynb",
+ "source": "src/describe.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "describe.py",
+ "image": "mlrun/mlrun",
+ "handler": "analyze",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "describe",
+ "description": "describe and visualizes dataset stats",
+ "labels": {
+ "author": "Iguazio"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "describe.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "data-analysis"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/describe/0.9.0/",
+ "assets": {
+ "example": "src/describe.ipynb",
+ "source": "src/describe.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "describe.py",
+ "image": "mlrun/mlrun",
+ "handler": "summarize",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "describe",
+ "description": "describe and visualizes dataset stats",
+ "labels": {
+ "author": "Davids"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.2",
+ "tag": "0.9.2",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "describe.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "data-analysis"
+ ],
+ "generationDate": "2022-04-26:10-20",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/describe/0.9.2/",
+ "assets": {
+ "example": "src/describe.ipynb",
+ "source": "src/describe.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "describe.py",
+ "image": "mlrun/mlrun",
+ "handler": "analyze",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "describe",
+ "description": "describe and visualizes dataset stats",
+ "labels": {
+ "author": "Iguazio"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "describe.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "data-analysis"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/describe/0.8.0/",
+ "assets": {
+ "example": "src/describe.ipynb",
+ "source": "src/describe.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "describe.py",
+ "image": "mlrun/mlrun",
+ "handler": "summarize",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "describe",
+ "description": "describe and visualizes dataset stats",
+ "labels": {
+ "author": "Davids"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "describe.ipynb",
+ "mlrunVersion": "1.2.0",
+ "categories": [
+ "data-analysis"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/describe/1.1.0/",
+ "assets": {
+ "example": "src/describe.ipynb",
+ "source": "src/describe.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "describe.py",
+ "image": "mlrun/mlrun",
+ "handler": "analyze",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "github-utils",
+ "description": "add comments to github pull request",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "github_utils.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "utils"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/github_utils/latest/",
+ "assets": {
+ "example": "src/github_utils.ipynb",
+ "source": "src/github_utils.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "github_utils.py",
+ "image": "mlrun/mlrun",
+ "handler": "run_summary_comment",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "github-utils",
+ "description": "add comments to github pull request",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "github_utils.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "utils"
+ ],
+ "generationDate": "2021-05-19:22-41",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/github_utils/0.0.1/",
+ "assets": {
+ "example": "src/github_utils.ipynb",
+ "source": "src/github_utils.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "github_utils.py",
+ "image": "mlrun/mlrun",
+ "handler": "run_summary_comment",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "github-utils",
+ "description": "add comments to github pull request",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "github_utils.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "utils"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/github_utils/0.9.0/",
+ "assets": {
+ "example": "src/github_utils.ipynb",
+ "source": "src/github_utils.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "github_utils.py",
+ "image": "mlrun/mlrun",
+ "handler": "run_summary_comment",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "github-utils",
+ "description": "add comments to github pull request",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "github_utils.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "utils"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/github_utils/0.8.0/",
+ "assets": {
+ "example": "src/github_utils.ipynb",
+ "source": "src/github_utils.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "github_utils.py",
+ "image": "mlrun/mlrun",
+ "handler": "run_summary_comment",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "github-utils",
+ "description": "add comments to github pull request",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "github_utils.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "utils"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/github_utils/1.1.0/",
+ "assets": {
+ "example": "src/github_utils.ipynb",
+ "source": "src/github_utils.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "github_utils.py",
+ "image": "mlrun/mlrun",
+ "handler": "run_summary_comment",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "aggregate",
+ "description": "Rolling aggregation over Metrics and Lables according to specifications",
+ "labels": {
+ "author": "avia"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.2.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.2",
+ "generationDate": "2022-08-28:17-25",
+ "example": "aggregate.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-preparation"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/aggregate/latest/",
+ "assets": {
+ "example": "src/aggregate.ipynb",
+ "source": "src/aggregate.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "aggregate.py",
+ "image": "mlrun/mlrun",
+ "handler": "aggregate",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "aggregate",
+ "description": "Rolling aggregation over Metrics and Lables according to specifications",
+ "labels": {
+ "author": "avia"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.0.0",
+ "example": "aggregate.ipynb",
+ "mlrunVersion": "0.6.2",
+ "categories": [
+ "data-preparation"
+ ],
+ "generationDate": "2021-05-19:22-31",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/aggregate/0.0.1/",
+ "assets": {
+ "example": "src/aggregate.ipynb",
+ "source": "src/aggregate.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "aggregate.py",
+ "image": "mlrun/mlrun",
+ "handler": "aggregate",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "aggregate",
+ "description": "Rolling aggregation over Metrics and Lables according to specifications",
+ "labels": {
+ "author": "avia"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "aggregate.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "data-preparation"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/aggregate/0.9.0/",
+ "assets": {
+ "example": "src/aggregate.ipynb",
+ "source": "src/aggregate.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "aggregate.py",
+ "image": "mlrun/mlrun",
+ "handler": "aggregate",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "aggregate",
+ "description": "Rolling aggregation over Metrics and Lables according to specifications",
+ "labels": {
+ "author": "avia"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.2.0",
+ "tag": "1.2.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.2",
+ "generationDate": "2022-08-28:17-25",
+ "example": "aggregate.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-preparation"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/aggregate/1.2.0/",
+ "assets": {
+ "example": "src/aggregate.ipynb",
+ "source": "src/aggregate.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "aggregate.py",
+ "image": "mlrun/mlrun",
+ "handler": "aggregate",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "aggregate",
+ "description": "Rolling aggregation over Metrics and Lables according to specifications",
+ "labels": {
+ "author": "avia"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "aggregate.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "data-preparation"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/aggregate/0.8.0/",
+ "assets": {
+ "example": "src/aggregate.ipynb",
+ "source": "src/aggregate.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "aggregate.py",
+ "image": "mlrun/mlrun",
+ "handler": "aggregate",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "aggregate",
+ "description": "Rolling aggregation over Metrics and Lables according to specifications",
+ "labels": {
+ "author": "avia"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "example": "aggregate.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-preparation"
+ ],
+ "generationDate": "2022-08-28:17-25",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/aggregate/1.1.0/",
+ "assets": {
+ "example": "src/aggregate.ipynb",
+ "source": "src/aggregate.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "aggregate.py",
+ "image": "mlrun/mlrun",
+ "handler": "aggregate",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "bert-embeddings",
+ "description": "Get BERT based embeddings for given text",
+ "labels": {
+ "framework": "pytorch"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.1",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "bert_embeddings.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "machine-learning",
+ "data-preparation"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/bert_embeddings/latest/",
+ "assets": {
+ "example": "src/bert_embeddings.ipynb",
+ "source": "src/bert_embeddings.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "bert_embeddings.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": [
+ "torch==1.6.0"
+ ],
+ "kind": "nuclio"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "bert-embeddings",
+ "description": "Get BERT based embeddings for given text",
+ "labels": {
+ "framework": "pytorch"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "2.10.0",
+ "example": "bert_embeddings.ipynb",
+ "mlrunVersion": "0.5.4",
+ "categories": [
+ "machine-learning",
+ "data-preparation"
+ ],
+ "generationDate": "2021-05-19:22-04",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/bert_embeddings/0.0.1/",
+ "assets": {
+ "example": "src/bert_embeddings.ipynb",
+ "source": "src/bert_embeddings.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "bert_embeddings.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": [
+ "torch==1.6.0"
+ ],
+ "kind": "nuclio"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "bert-embeddings",
+ "description": "Get BERT based embeddings for given text",
+ "labels": {
+ "framework": "pytorch"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.1",
+ "tag": "1.1.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "bert_embeddings.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "machine-learning",
+ "data-preparation"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/bert_embeddings/1.1.1/",
+ "assets": {
+ "example": "src/bert_embeddings.ipynb",
+ "source": "src/bert_embeddings.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "bert_embeddings.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": [
+ "torch==1.6.0"
+ ],
+ "kind": "nuclio"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "bert-embeddings",
+ "description": "Get BERT based embeddings for given text",
+ "labels": {
+ "framework": "pytorch"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "bert_embeddings.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "machine-learning",
+ "data-preparation"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/bert_embeddings/0.9.0/",
+ "assets": {
+ "example": "src/bert_embeddings.ipynb",
+ "source": "src/bert_embeddings.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "bert_embeddings.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": [
+ "torch==1.6.0"
+ ],
+ "kind": "nuclio"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "bert-embeddings",
+ "description": "Get BERT based embeddings for given text",
+ "labels": {
+ "framework": "pytorch"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "bert_embeddings.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "machine-learning",
+ "data-preparation"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/bert_embeddings/0.8.0/",
+ "assets": {
+ "example": "src/bert_embeddings.ipynb",
+ "source": "src/bert_embeddings.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "bert_embeddings.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": [
+ "torch==1.6.0"
+ ],
+ "kind": "nuclio"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "bert-embeddings",
+ "description": "Get BERT based embeddings for given text",
+ "labels": {
+ "framework": "pytorch"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "bert_embeddings.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "machine-learning",
+ "data-preparation"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/bert_embeddings/1.1.0/",
+ "assets": {
+ "example": "src/bert_embeddings.ipynb",
+ "source": "src/bert_embeddings.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "bert_embeddings.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": [
+ "torch==1.6.0"
+ ],
+ "kind": "nuclio"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "concept-drift",
+ "description": "Deploy a streaming Concept Drift detector on a labeled stream",
+ "labels": {
+ "author": "orz",
+ "framework": "sklearn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "concept_drift.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "machine-learning",
+ "model-serving"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/concept_drift/latest/",
+ "assets": {
+ "example": "src/concept_drift.ipynb",
+ "source": "src/concept_drift.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "concept_drift.py",
+ "image": "mlrun/ml-models",
+ "handler": "concept_drift_deployer",
+ "requirements": [
+ "scikit-multiflow"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "concept-drift",
+ "description": "Deploy a streaming Concept Drift detector on a labeled stream",
+ "labels": {
+ "author": "orz",
+ "framework": "sklearn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "concept_drift.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "machine-learning",
+ "model-serving"
+ ],
+ "generationDate": "2021-05-19:22-04",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/concept_drift/0.0.1/",
+ "assets": {
+ "example": "src/concept_drift.ipynb",
+ "source": "src/concept_drift.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "concept_drift.py",
+ "image": "mlrun/ml-models",
+ "handler": "concept_drift_deployer",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "concept-drift",
+ "description": "Deploy a streaming Concept Drift detector on a labeled stream",
+ "labels": {
+ "author": "orz",
+ "framework": "sklearn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.1",
+ "tag": "0.9.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "concept_drift.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "machine-learning",
+ "model-serving"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/concept_drift/0.9.1/",
+ "assets": {
+ "example": "src/concept_drift.ipynb",
+ "source": "src/concept_drift.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "concept_drift.py",
+ "image": "mlrun/ml-models",
+ "handler": "concept_drift_deployer",
+ "requirements": [
+ "scikit-multiflow"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "concept-drift",
+ "description": "Deploy a streaming Concept Drift detector on a labeled stream",
+ "labels": {
+ "author": "orz",
+ "framework": "sklearn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "concept_drift.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "machine-learning",
+ "model-serving"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/concept_drift/0.9.0/",
+ "assets": {
+ "example": "src/concept_drift.ipynb",
+ "source": "src/concept_drift.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "concept_drift.py",
+ "image": "mlrun/ml-models",
+ "handler": "concept_drift_deployer",
+ "requirements": [
+ "scikit-multiflow"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "concept-drift",
+ "description": "Deploy a streaming Concept Drift detector on a labeled stream",
+ "labels": {
+ "author": "orz",
+ "framework": "sklearn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "concept_drift.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "machine-learning",
+ "model-serving"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/concept_drift/0.8.0/",
+ "assets": {
+ "example": "src/concept_drift.ipynb",
+ "source": "src/concept_drift.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "concept_drift.py",
+ "image": "mlrun/ml-models",
+ "handler": "concept_drift_deployer",
+ "requirements": [
+ "scikit-multiflow"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "concept-drift",
+ "description": "Deploy a streaming Concept Drift detector on a labeled stream",
+ "labels": {
+ "author": "orz",
+ "framework": "sklearn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "concept_drift.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "machine-learning",
+ "model-serving"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/concept_drift/1.1.0/",
+ "assets": {
+ "example": "src/concept_drift.ipynb",
+ "source": "src/concept_drift.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "concept_drift.py",
+ "image": "mlrun/ml-models",
+ "handler": "concept_drift_deployer",
+ "requirements": [
+ "scikit-multiflow"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "pandas-profiling-report",
+ "description": "Create Pandas Profiling Report from Dataset",
+ "labels": {
+ "author": "nicks"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "pandas_profiling_report.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-analysis"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/pandas_profiling_report/latest/",
+ "assets": {
+ "example": "src/pandas_profiling_report.ipynb",
+ "source": "src/pandas_profiling_report.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "pandas_profiling_report.py",
+ "image": "mlrun/mlrun",
+ "handler": "pandas_profiling_report",
+ "requirements": [
+ "pandas_profiling"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "pandas-profiling-report",
+ "description": "Create Pandas Profiling Report from Dataset",
+ "labels": {
+ "author": "nicks"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "pandas_profiling_report.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "data-analysis"
+ ],
+ "generationDate": "2021-05-19:23-13",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/pandas_profiling_report/0.0.1/",
+ "assets": {
+ "example": "src/pandas_profiling_report.ipynb",
+ "source": "src/pandas_profiling_report.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "pandas_profiling_report.py",
+ "image": "mlrun/mlrun",
+ "handler": "pandas_profiling_report",
+ "requirements": [
+ "pandas_profiling"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "pandas-profiling-report",
+ "description": "Create Pandas Profiling Report from Dataset",
+ "labels": {
+ "author": "nicks"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "pandas_profiling_report.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "data-analysis"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/pandas_profiling_report/0.9.0/",
+ "assets": {
+ "example": "src/pandas_profiling_report.ipynb",
+ "source": "src/pandas_profiling_report.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "pandas_profiling_report.py",
+ "image": "mlrun/mlrun",
+ "handler": "pandas_profiling_report",
+ "requirements": [
+ "pandas_profiling"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "pandas-profiling-report",
+ "description": "Create Pandas Profiling Report from Dataset",
+ "labels": {
+ "author": "nicks"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "pandas_profiling_report.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "data-analysis"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/pandas_profiling_report/0.8.0/",
+ "assets": {
+ "example": "src/pandas_profiling_report.ipynb",
+ "source": "src/pandas_profiling_report.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "pandas_profiling_report.py",
+ "image": "mlrun/mlrun",
+ "handler": "pandas_profiling_report",
+ "requirements": [
+ "pandas_profiling"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "pandas-profiling-report",
+ "description": "Create Pandas Profiling Report from Dataset",
+ "labels": {
+ "author": "nicks"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "pandas_profiling_report.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-analysis"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/pandas_profiling_report/1.1.0/",
+ "assets": {
+ "example": "src/pandas_profiling_report.ipynb",
+ "source": "src/pandas_profiling_report.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "pandas_profiling_report.py",
+ "image": "mlrun/mlrun",
+ "handler": "pandas_profiling_report",
+ "requirements": [
+ "pandas_profiling"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "load-dataset",
+ "description": "load a toy dataset from scikit-learn",
+ "labels": {
+ "author": "yjb",
+ "framework": "sklearn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "load_dataset.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-preparation"
+ ],
+ "hidden": false,
+ "doc": "README.md"
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/load_dataset/latest/",
+ "assets": {
+ "example": "src/load_dataset.ipynb",
+ "source": "src/load_dataset.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "load_dataset.py",
+ "image": "mlrun/ml-models",
+ "handler": "load_dataset",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "load-dataset",
+ "description": "load a toy dataset from scikit-learn",
+ "labels": {
+ "author": "yjb",
+ "framework": "sklearn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "load_dataset.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "data-preparation"
+ ],
+ "generationDate": "2021-05-19:23-13",
+ "doc": "README.md"
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/load_dataset/0.0.1/",
+ "assets": {
+ "example": "src/load_dataset.ipynb",
+ "source": "src/load_dataset.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "load_dataset.py",
+ "image": "mlrun/ml-models",
+ "handler": "load_dataset",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "load-dataset",
+ "description": "load a toy dataset from scikit-learn",
+ "labels": {
+ "author": "yjb",
+ "framework": "sklearn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "load_dataset.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "data-preparation"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": "README.md"
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/load_dataset/0.9.0/",
+ "assets": {
+ "example": "src/load_dataset.ipynb",
+ "source": "src/load_dataset.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "load_dataset.py",
+ "image": "mlrun/ml-models",
+ "handler": "load_dataset",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "load-dataset",
+ "description": "load a toy dataset from scikit-learn",
+ "labels": {
+ "author": "yjb",
+ "framework": "sklearn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "load_dataset.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "data-preparation"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": "README.md"
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/load_dataset/0.8.0/",
+ "assets": {
+ "example": "src/load_dataset.ipynb",
+ "source": "src/load_dataset.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "load_dataset.py",
+ "image": "mlrun/ml-models",
+ "handler": "load_dataset",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "load-dataset",
+ "description": "load a toy dataset from scikit-learn",
+ "labels": {
+ "author": "yjb",
+ "framework": "sklearn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "load_dataset.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-preparation"
+ ],
+ "hidden": false,
+ "doc": "README.md"
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/load_dataset/1.1.0/",
+ "assets": {
+ "example": "src/load_dataset.ipynb",
+ "source": "src/load_dataset.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "load_dataset.py",
+ "image": "mlrun/ml-models",
+ "handler": "load_dataset",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "concept-drift-streaming",
+ "description": "Deploy a streaming Concept Drift detector on a labeled stream. the nuclio part of the concept_drift function",
+ "labels": {
+ "author": "orz",
+ "framework": "sklearn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "concept_drift_streaming.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "machine-learning",
+ "monitoring"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/concept_drift_streaming/latest/",
+ "assets": {
+ "example": "src/concept_drift_streaming.ipynb",
+ "source": "src/concept_drift_streaming.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "concept_drift_streaming.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": [
+ "scikit-multiflow==0.4.1",
+ "v3io_frames"
+ ],
+ "kind": "nuclio"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "concept-drift-streaming",
+ "description": "Deploy a streaming Concept Drift detector on a labeled stream. the nuclio part of the concept_drift function",
+ "labels": {
+ "author": "orz",
+ "framework": "sklearn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "concept_drift_streaming.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "machine-learning",
+ "monitoring"
+ ],
+ "generationDate": "2021-05-19:22-41",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/concept_drift_streaming/0.0.1/",
+ "assets": {
+ "example": "src/concept_drift_streaming.ipynb",
+ "source": "src/concept_drift_streaming.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "concept_drift_streaming.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": [
+ "scikit-multiflow==0.4.1",
+ "v3io_frames"
+ ],
+ "kind": "nuclio"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "concept-drift-streaming",
+ "description": "Deploy a streaming Concept Drift detector on a labeled stream. the nuclio part of the concept_drift function",
+ "labels": {
+ "author": "orz",
+ "framework": "sklearn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.1",
+ "tag": "0.9.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "concept_drift_streaming.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "machine-learning",
+ "monitoring"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/concept_drift_streaming/0.9.1/",
+ "assets": {
+ "example": "src/concept_drift_streaming.ipynb",
+ "source": "src/concept_drift_streaming.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "concept_drift_streaming.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": [
+ "scikit-multiflow==0.4.1",
+ "v3io_frames"
+ ],
+ "kind": "nuclio"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "concept-drift-streaming",
+ "description": "Deploy a streaming Concept Drift detector on a labeled stream. the nuclio part of the concept_drift function",
+ "labels": {
+ "author": "orz",
+ "framework": "sklearn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "concept_drift_streaming.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "machine-learning",
+ "monitoring"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/concept_drift_streaming/0.9.0/",
+ "assets": {
+ "example": "src/concept_drift_streaming.ipynb",
+ "source": "src/concept_drift_streaming.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "concept_drift_streaming.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": [
+ "scikit-multiflow==0.4.1",
+ "v3io_frames"
+ ],
+ "kind": "nuclio"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "concept-drift-streaming",
+ "description": "Deploy a streaming Concept Drift detector on a labeled stream. the nuclio part of the concept_drift function",
+ "labels": {
+ "author": "orz",
+ "framework": "sklearn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "concept_drift_streaming.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "machine-learning",
+ "monitoring"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/concept_drift_streaming/0.8.0/",
+ "assets": {
+ "example": "src/concept_drift_streaming.ipynb",
+ "source": "src/concept_drift_streaming.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "concept_drift_streaming.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": [
+ "scikit-multiflow==0.4.1",
+ "v3io_frames"
+ ],
+ "kind": "nuclio"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "concept-drift-streaming",
+ "description": "Deploy a streaming Concept Drift detector on a labeled stream. the nuclio part of the concept_drift function",
+ "labels": {
+ "author": "orz",
+ "framework": "sklearn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "concept_drift_streaming.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "machine-learning",
+ "monitoring"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/concept_drift_streaming/1.1.0/",
+ "assets": {
+ "example": "src/concept_drift_streaming.ipynb",
+ "source": "src/concept_drift_streaming.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "concept_drift_streaming.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": [
+ "scikit-multiflow==0.4.1",
+ "v3io_frames"
+ ],
+ "kind": "nuclio"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "auto-trainer",
+ "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.3.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "auto_trainer.ipynb",
+ "mlrunVersion": "1.3.0",
+ "categories": [
+ "machine-learning",
+ "model-training"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/auto_trainer/latest/",
+ "assets": {
+ "example": "src/auto_trainer.ipynb",
+ "source": "src/auto_trainer.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "auto_trainer.py",
+ "image": "mlrun/mlrun",
+ "handler": "train",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "auto-trainer",
+ "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.10.3",
+ "tag": "0.10.3",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "auto_trainer.ipynb",
+ "mlrunVersion": "0.10.0",
+ "categories": [
+ "machine-learning",
+ "model-training"
+ ],
+ "generationDate": "2022-04-26:10-43",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/auto_trainer/0.10.3/",
+ "assets": {
+ "example": "src/auto_trainer.ipynb",
+ "source": "src/auto_trainer.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "auto_trainer.py",
+ "image": "",
+ "handler": "train",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "auto-trainer",
+ "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.0.7",
+ "tag": "1.0.7",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "auto_trainer.ipynb",
+ "mlrunVersion": "1.0.0",
+ "categories": [
+ "machine-learning",
+ "model-training"
+ ],
+ "generationDate": "2022-04-26:10-43",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/auto_trainer/1.0.7/",
+ "assets": {
+ "example": "src/auto_trainer.ipynb",
+ "source": "src/auto_trainer.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "auto_trainer.py",
+ "image": "mlrun/mlrun",
+ "handler": "train",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "auto-trainer",
+ "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.10.2",
+ "tag": "0.10.2",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "auto_trainer.ipynb",
+ "mlrunVersion": "0.10.0",
+ "categories": [
+ "machine-learning",
+ "model-training"
+ ],
+ "generationDate": "2022-02-06:10-18",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/auto_trainer/0.10.2/",
+ "assets": {
+ "example": "src/auto_trainer.ipynb",
+ "source": "src/auto_trainer.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "auto_trainer.py",
+ "image": "",
+ "handler": "train",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "auto-trainer",
+ "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.0.6",
+ "tag": "1.0.6",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "auto_trainer.ipynb",
+ "mlrunVersion": "1.0.0",
+ "categories": [
+ "machine-learning",
+ "model-training"
+ ],
+ "generationDate": "2022-04-26:10-43",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/auto_trainer/1.0.6/",
+ "assets": {
+ "example": "src/auto_trainer.ipynb",
+ "source": "src/auto_trainer.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "auto_trainer.py",
+ "image": "mlrun/mlrun",
+ "handler": "train",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "auto-trainer",
+ "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.3.0",
+ "tag": "1.3.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "auto_trainer.ipynb",
+ "mlrunVersion": "1.3.0",
+ "categories": [
+ "machine-learning",
+ "model-training"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/auto_trainer/1.3.0/",
+ "assets": {
+ "example": "src/auto_trainer.ipynb",
+ "source": "src/auto_trainer.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "auto_trainer.py",
+ "image": "mlrun/mlrun",
+ "handler": "train",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "auto-trainer",
+ "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "auto_trainer.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "machine-learning",
+ "model-training"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/auto_trainer/1.1.0/",
+ "assets": {
+ "example": "src/auto_trainer.ipynb",
+ "source": "src/auto_trainer.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "auto_trainer.py",
+ "image": "mlrun/mlrun",
+ "handler": "train",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "auto-trainer",
+ "description": "Automatic train, evaluate and predict functions for the ML frameworks - Scikit-Learn, XGBoost and LightGBM.",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.0.5",
+ "tag": "1.0.5",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "auto_trainer.ipynb",
+ "mlrunVersion": "1.0.0",
+ "categories": [
+ "machine-learning",
+ "model-training"
+ ],
+ "generationDate": "2022-04-26:10-43",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/auto_trainer/1.0.5/",
+ "assets": {
+ "example": "src/auto_trainer.ipynb",
+ "source": "src/auto_trainer.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "auto_trainer.py",
+ "image": "mlrun/mlrun",
+ "handler": "train",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "tf2-serving-v2",
+ "description": "tf2 image classification server v2",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "tf2_serving_v2.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/tf2_serving_v2/latest/",
+ "assets": {
+ "example": "src/tf2_serving_v2.ipynb",
+ "source": "src/tf2_serving_v2.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "tf2_serving_v2.py",
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "requirements": [
+ "requests",
+ "pillow",
+ "tensorflow>=2.1"
+ ],
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "tf2-serving-v2",
+ "description": "tf2 image classification server v2",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "tf2_serving_v2.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-05-19:23-13",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/tf2_serving_v2/0.0.1/",
+ "assets": {
+ "example": "src/tf2_serving_v2.ipynb",
+ "source": "src/tf2_serving_v2.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "tf2_serving_v2.py",
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "requirements": [
+ "requests",
+ "pillow",
+ "tensorflow>=2.1"
+ ],
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "tf2-serving-v2",
+ "description": "tf2 image classification server v2",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.1",
+ "tag": "0.9.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "tf2_serving_v2.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/tf2_serving_v2/0.9.1/",
+ "assets": {
+ "example": "src/tf2_serving_v2.ipynb",
+ "source": "src/tf2_serving_v2.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "tf2_serving_v2.py",
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "requirements": [
+ "requests",
+ "pillow",
+ "tensorflow>=2.1"
+ ],
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "tf2-serving-v2",
+ "description": "tf2 image classification server v2",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "tf2_serving_v2.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/tf2_serving_v2/0.9.0/",
+ "assets": {
+ "example": "src/tf2_serving_v2.ipynb",
+ "source": "src/tf2_serving_v2.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "tf2_serving_v2.py",
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "requirements": [
+ "requests",
+ "pillow",
+ "tensorflow>=2.1"
+ ],
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "tf2-serving-v2",
+ "description": "tf2 image classification server v2",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "tf2_serving_v2.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/tf2_serving_v2/0.8.0/",
+ "assets": {
+ "example": "src/tf2_serving_v2.ipynb",
+ "source": "src/tf2_serving_v2.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "tf2_serving_v2.py",
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "requirements": [
+ "requests",
+ "pillow",
+ "tensorflow>=2.1"
+ ],
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "tf2-serving-v2",
+ "description": "tf2 image classification server v2",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "tf2_serving_v2.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/tf2_serving_v2/1.1.0/",
+ "assets": {
+ "example": "src/tf2_serving_v2.ipynb",
+ "source": "src/tf2_serving_v2.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "tf2_serving_v2.py",
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "requirements": [
+ "requests",
+ "pillow",
+ "tensorflow>=2.1"
+ ],
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "stream-to-parquet",
+ "description": "Saves a stream to Parquet and can lunch drift detection task on it",
+ "labels": {
+ "author": "orz"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "stream_to_parquet.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "machine-learning",
+ "data-preparation"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/stream_to_parquet/latest/",
+ "assets": {
+ "example": "src/stream_to_parquet.ipynb",
+ "source": "src/stream_to_parquet.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "stream_to_parquet.py",
+ "requirements": [],
+ "customFields": {
+ "max_replicas": 1,
+ "min_replicas": 1
+ },
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "kind": "nuclio"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "stream-to-parquet",
+ "description": "Saves a stream to Parquet and can lunch drift detection task on it",
+ "labels": {
+ "author": "orz"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "stream_to_parquet.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "machine-learning",
+ "data-preparation"
+ ],
+ "generationDate": "2021-05-19:23-13",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/stream_to_parquet/0.0.1/",
+ "assets": {
+ "example": "src/stream_to_parquet.ipynb",
+ "source": "src/stream_to_parquet.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "stream_to_parquet.py",
+ "requirements": [],
+ "image": "mlrun/ml-models",
+ "customFields": {
+ "min_replicas": 1,
+ "max_replicas": 1
+ },
+ "handler": "handler",
+ "kind": "nuclio"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "stream-to-parquet",
+ "description": "Saves a stream to Parquet and can lunch drift detection task on it",
+ "labels": {
+ "author": "orz"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "stream_to_parquet.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "machine-learning",
+ "data-preparation"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/stream_to_parquet/0.9.0/",
+ "assets": {
+ "example": "src/stream_to_parquet.ipynb",
+ "source": "src/stream_to_parquet.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "stream_to_parquet.py",
+ "requirements": [],
+ "customFields": {
+ "max_replicas": 1,
+ "min_replicas": 1
+ },
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "kind": "nuclio"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "stream-to-parquet",
+ "description": "Saves a stream to Parquet and can lunch drift detection task on it",
+ "labels": {
+ "author": "orz"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "stream_to_parquet.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "machine-learning",
+ "data-preparation"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/stream_to_parquet/0.8.0/",
+ "assets": {
+ "example": "src/stream_to_parquet.ipynb",
+ "source": "src/stream_to_parquet.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "stream_to_parquet.py",
+ "requirements": [],
+ "customFields": {
+ "max_replicas": 1,
+ "min_replicas": 1
+ },
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "kind": "nuclio"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "stream-to-parquet",
+ "description": "Saves a stream to Parquet and can lunch drift detection task on it",
+ "labels": {
+ "author": "orz"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "stream_to_parquet.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "machine-learning",
+ "data-preparation"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/stream_to_parquet/1.1.0/",
+ "assets": {
+ "example": "src/stream_to_parquet.ipynb",
+ "source": "src/stream_to_parquet.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "stream_to_parquet.py",
+ "requirements": [],
+ "customFields": {
+ "max_replicas": 1,
+ "min_replicas": 1
+ },
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "kind": "nuclio"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "v2-model-server",
+ "description": "generic sklearn model server",
+ "labels": {
+ "author": "yaronh",
+ "framework": "sklearn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "v2_model_server.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/v2_model_server/latest/",
+ "assets": {
+ "example": "src/v2_model_server.ipynb",
+ "source": "src/v2_model_server.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "v2_model_server.py",
+ "requirements": [],
+ "customFields": {
+ "default_class": "ClassifierModel"
+ },
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "v2-model-server",
+ "description": "generic sklearn model server",
+ "labels": {
+ "author": "yaronh",
+ "framework": "sklearn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "v2_model_server.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-05-19:23-13",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/v2_model_server/0.0.1/",
+ "assets": {
+ "example": "src/v2_model_server.ipynb",
+ "source": "src/v2_model_server.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "v2_model_server.py",
+ "requirements": [],
+ "image": "mlrun/mlrun",
+ "customFields": {
+ "default_class": "ClassifierModel"
+ },
+ "handler": "handler",
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "v2-model-server",
+ "description": "generic sklearn model server",
+ "labels": {
+ "author": "yaronh",
+ "framework": "sklearn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "v2_model_server.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/v2_model_server/0.9.0/",
+ "assets": {
+ "example": "src/v2_model_server.ipynb",
+ "source": "src/v2_model_server.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "v2_model_server.py",
+ "requirements": [],
+ "customFields": {
+ "default_class": "ClassifierModel"
+ },
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "v2-model-server",
+ "description": "generic sklearn model server",
+ "labels": {
+ "author": "yaronh",
+ "framework": "sklearn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.0.0",
+ "tag": "1.0.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "v2_model_server.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/v2_model_server/1.0.0/",
+ "assets": {
+ "example": "src/v2_model_server.ipynb",
+ "source": "src/v2_model_server.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "v2_model_server.py",
+ "requirements": [],
+ "customFields": {
+ "default_class": "ClassifierModel"
+ },
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "v2-model-server",
+ "description": "generic sklearn model server",
+ "labels": {
+ "author": "yaronh",
+ "framework": "sklearn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "v2_model_server.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/v2_model_server/0.8.0/",
+ "assets": {
+ "example": "src/v2_model_server.ipynb",
+ "source": "src/v2_model_server.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "v2_model_server.py",
+ "requirements": [],
+ "customFields": {
+ "default_class": "ClassifierModel"
+ },
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "v2-model-server",
+ "description": "generic sklearn model server",
+ "labels": {
+ "author": "yaronh",
+ "framework": "sklearn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "v2_model_server.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/v2_model_server/1.1.0/",
+ "assets": {
+ "example": "src/v2_model_server.ipynb",
+ "source": "src/v2_model_server.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "v2_model_server.py",
+ "requirements": [],
+ "customFields": {
+ "default_class": "ClassifierModel"
+ },
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "feature-perms",
+ "description": "estimate feature importances using permutations",
+ "labels": {
+ "author": "yjb"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "feature_perms.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-analysis"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/feature_perms/latest/",
+ "assets": {
+ "example": "src/feature_perms.ipynb",
+ "source": "src/feature_perms.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "feature_perms.py",
+ "image": "mlrun/ml-models",
+ "handler": "permutation_importance",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "feature-perms",
+ "description": "estimate feature importances using permutations",
+ "labels": {
+ "author": "yjb"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "feature_perms.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "data-analysis"
+ ],
+ "generationDate": "2021-05-19:22-41",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/feature_perms/0.0.1/",
+ "assets": {
+ "example": "src/feature_perms.ipynb",
+ "source": "src/feature_perms.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "feature_perms.py",
+ "image": "mlrun/ml-models",
+ "handler": "permutation_importance",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "feature-perms",
+ "description": "estimate feature importances using permutations",
+ "labels": {
+ "author": "yjb"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "feature_perms.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "data-analysis"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/feature_perms/0.9.0/",
+ "assets": {
+ "example": "src/feature_perms.ipynb",
+ "source": "src/feature_perms.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "feature_perms.py",
+ "image": "mlrun/ml-models",
+ "handler": "permutation_importance",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "feature-perms",
+ "description": "estimate feature importances using permutations",
+ "labels": {
+ "author": "yjb"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.0.0",
+ "tag": "1.0.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "feature_perms.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "data-analysis"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/feature_perms/1.0.0/",
+ "assets": {
+ "example": "src/feature_perms.ipynb",
+ "source": "src/feature_perms.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "feature_perms.py",
+ "image": "mlrun/ml-models",
+ "handler": "permutation_importance",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "feature-perms",
+ "description": "estimate feature importances using permutations",
+ "labels": {
+ "author": "yjb"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "feature_perms.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "data-analysis"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/feature_perms/0.8.0/",
+ "assets": {
+ "example": "src/feature_perms.ipynb",
+ "source": "src/feature_perms.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "feature_perms.py",
+ "image": "mlrun/ml-models",
+ "handler": "permutation_importance",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "feature-perms",
+ "description": "estimate feature importances using permutations",
+ "labels": {
+ "author": "yjb"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "feature_perms.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-analysis"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/feature_perms/1.1.0/",
+ "assets": {
+ "example": "src/feature_perms.ipynb",
+ "source": "src/feature_perms.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "feature_perms.py",
+ "image": "mlrun/ml-models",
+ "handler": "permutation_importance",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "model-server-tester",
+ "description": "test model servers",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "model_server_tester.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "monitoring",
+ "model-serving"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/model_server_tester/latest/",
+ "assets": {
+ "example": "src/model_server_tester.ipynb",
+ "source": "src/model_server_tester.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "model_server_tester.py",
+ "image": "mlrun/mlrun",
+ "handler": "model_server_tester",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "model-server-tester",
+ "description": "test model servers",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "model_server_tester.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "monitoring",
+ "model-serving"
+ ],
+ "generationDate": "2021-05-19:23-13",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/model_server_tester/0.0.1/",
+ "assets": {
+ "example": "src/model_server_tester.ipynb",
+ "source": "src/model_server_tester.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "model_server_tester.py",
+ "image": "mlrun/mlrun",
+ "handler": "model_server_tester",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "model-server-tester",
+ "description": "test model servers",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "model_server_tester.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "monitoring",
+ "model-serving"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/model_server_tester/0.9.0/",
+ "assets": {
+ "example": "src/model_server_tester.ipynb",
+ "source": "src/model_server_tester.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "model_server_tester.py",
+ "image": "mlrun/mlrun",
+ "handler": "model_server_tester",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "model-server-tester",
+ "description": "test model servers",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.0.0",
+ "tag": "1.0.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "model_server_tester.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "monitoring",
+ "model-serving"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/model_server_tester/1.0.0/",
+ "assets": {
+ "example": "src/model_server_tester.ipynb",
+ "source": "src/model_server_tester.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "model_server_tester.py",
+ "image": "mlrun/mlrun",
+ "handler": "model_server_tester",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "model-server-tester",
+ "description": "test model servers",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "model_server_tester.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "monitoring",
+ "model-serving"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/model_server_tester/0.8.0/",
+ "assets": {
+ "example": "src/model_server_tester.ipynb",
+ "source": "src/model_server_tester.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "model_server_tester.py",
+ "image": "mlrun/mlrun",
+ "handler": "model_server_tester",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "model-server-tester",
+ "description": "test model servers",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "model_server_tester.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "monitoring",
+ "model-serving"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/model_server_tester/1.1.0/",
+ "assets": {
+ "example": "src/model_server_tester.ipynb",
+ "source": "src/model_server_tester.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "model_server_tester.py",
+ "image": "mlrun/mlrun",
+ "handler": "model_server_tester",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "sentiment-analysis-serving",
+ "description": "BERT based sentiment classification model",
+ "labels": {
+ "author": "avia",
+ "framework": "pytorch"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "sentiment_analysis_serving.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/sentiment_analysis_serving/latest/",
+ "assets": {
+ "example": "src/sentiment_analysis_serving.ipynb",
+ "source": "src/sentiment_analysis_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "sentiment_analysis_serving.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": [
+ "transformers==3.0.2"
+ ],
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "sentiment-analysis-serving",
+ "description": "BERT based sentiment classification model",
+ "labels": {
+ "author": "avia",
+ "framework": "pytorch"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.0.0",
+ "example": "sentiment_analysis_serving.ipynb",
+ "mlrunVersion": "0.6.3",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-05-19:23-13",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/sentiment_analysis_serving/0.0.1/",
+ "assets": {
+ "example": "src/sentiment_analysis_serving.ipynb",
+ "source": "src/sentiment_analysis_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "sentiment_analysis_serving.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": [
+ "transformers==3.0.2"
+ ],
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "sentiment-analysis-serving",
+ "description": "BERT based sentiment classification model",
+ "labels": {
+ "author": "avia",
+ "framework": "pytorch"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "sentiment_analysis_serving.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/sentiment_analysis_serving/0.9.0/",
+ "assets": {
+ "example": "src/sentiment_analysis_serving.ipynb",
+ "source": "src/sentiment_analysis_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "sentiment_analysis_serving.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": [
+ "transformers==3.0.2"
+ ],
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "sentiment-analysis-serving",
+ "description": "BERT based sentiment classification model",
+ "labels": {
+ "author": "avia",
+ "framework": "pytorch"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.0.0",
+ "tag": "1.0.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.4.0",
+ "example": "sentiment_analysis_serving.ipynb",
+ "mlrunVersion": "1.0.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/sentiment_analysis_serving/1.0.0/",
+ "assets": {
+ "example": "src/sentiment_analysis_serving.ipynb",
+ "source": "src/sentiment_analysis_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "sentiment_analysis_serving.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": [
+ "transformers==3.0.2"
+ ],
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "sentiment-analysis-serving",
+ "description": "BERT based sentiment classification model",
+ "labels": {
+ "author": "avia",
+ "framework": "pytorch"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "sentiment_analysis_serving.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/sentiment_analysis_serving/0.8.0/",
+ "assets": {
+ "example": "src/sentiment_analysis_serving.ipynb",
+ "source": "src/sentiment_analysis_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "sentiment_analysis_serving.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": [
+ "transformers==3.0.2"
+ ],
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "sentiment-analysis-serving",
+ "description": "BERT based sentiment classification model",
+ "labels": {
+ "author": "avia",
+ "framework": "pytorch"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "sentiment_analysis_serving.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/sentiment_analysis_serving/1.1.0/",
+ "assets": {
+ "example": "src/sentiment_analysis_serving.ipynb",
+ "source": "src/sentiment_analysis_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "sentiment_analysis_serving.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": [
+ "transformers==3.0.2"
+ ],
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "get-offline-features",
+ "description": "retrieve offline feature vector results",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.2.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "get_offline_features.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-preparation",
+ "data-analysis",
+ "feature-store"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/get_offline_features/latest/",
+ "assets": {
+ "example": "src/get_offline_features.ipynb",
+ "source": "src/get_offline_features.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "get_offline_features.py",
+ "image": "mlrun/mlrun",
+ "handler": "get_offline_features",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "get-offline-features",
+ "description": "retrieve offline feature vector results",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.0.2",
+ "tag": "1.0.2",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "get_offline_features.ipynb",
+ "mlrunVersion": "1.0.1",
+ "categories": [
+ "data-preparation",
+ "data-analysis",
+ "feature-store"
+ ],
+ "generationDate": "2022-05-25:10-58",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/get_offline_features/1.0.2/",
+ "assets": {
+ "example": "src/get_offline_features.ipynb",
+ "source": "src/get_offline_features.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "get_offline_features.py",
+ "image": "mlrun/mlrun",
+ "handler": "get_offline_features",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "get-offline-features",
+ "description": "retrieve offline feature vector results",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "get_offline_features.ipynb",
+ "mlrunVersion": "0.9.1",
+ "categories": [
+ "data-preparation",
+ "data-analysis",
+ "feature-store"
+ ],
+ "generationDate": "2022-01-17:17-56",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/get_offline_features/0.9.0/",
+ "assets": {
+ "example": "src/get_offline_features.ipynb",
+ "source": "src/get_offline_features.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "get_offline_features.py",
+ "image": "mlrun/mlrun",
+ "handler": "get_offline_features",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "get-offline-features",
+ "description": "retrieve offline feature vector results",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.2.0",
+ "tag": "1.2.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "get_offline_features.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-preparation",
+ "data-analysis",
+ "feature-store"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/get_offline_features/1.2.0/",
+ "assets": {
+ "example": "src/get_offline_features.ipynb",
+ "source": "src/get_offline_features.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "get_offline_features.py",
+ "image": "mlrun/mlrun",
+ "handler": "get_offline_features",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "get-offline-features",
+ "description": "retrieve offline feature vector results",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.0.1",
+ "tag": "1.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "get_offline_features.ipynb",
+ "mlrunVersion": "1.0.1",
+ "categories": [
+ "data-preparation",
+ "data-analysis",
+ "feature-store"
+ ],
+ "generationDate": "2022-05-25:10-58",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/get_offline_features/1.0.1/",
+ "assets": {
+ "example": "src/get_offline_features.ipynb",
+ "source": "src/get_offline_features.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "get_offline_features.py",
+ "image": "mlrun/mlrun",
+ "handler": "get_offline_features",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "get-offline-features",
+ "description": "retrieve offline feature vector results",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "get_offline_features.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-preparation",
+ "data-analysis",
+ "feature-store"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/get_offline_features/1.1.0/",
+ "assets": {
+ "example": "src/get_offline_features.ipynb",
+ "source": "src/get_offline_features.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "get_offline_features.py",
+ "image": "mlrun/mlrun",
+ "handler": "get_offline_features",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "v2-model-tester",
+ "description": "test v2 model servers",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "v2_model_tester.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "model-testing",
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/v2_model_tester/latest/",
+ "assets": {
+ "example": "src/v2_model_tester.ipynb",
+ "source": "src/v2_model_tester.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "v2_model_tester.py",
+ "image": "mlrun/mlrun",
+ "handler": "model_server_tester",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "v2-model-tester",
+ "description": "test v2 model servers",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "v2_model_tester.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "model-testing",
+ "machine-learning"
+ ],
+ "generationDate": "2021-05-19:23-13",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/v2_model_tester/0.0.1/",
+ "assets": {
+ "example": "src/v2_model_tester.ipynb",
+ "source": "src/v2_model_tester.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "v2_model_tester.py",
+ "image": "mlrun/mlrun",
+ "handler": "model_server_tester",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "v2-model-tester",
+ "description": "test v2 model servers",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "v2_model_tester.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "model-testing",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/v2_model_tester/0.9.0/",
+ "assets": {
+ "example": "src/v2_model_tester.ipynb",
+ "source": "src/v2_model_tester.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "v2_model_tester.py",
+ "image": "mlrun/mlrun",
+ "handler": "model_server_tester",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "v2-model-tester",
+ "description": "test v2 model servers",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "v2_model_tester.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "model-testing",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/v2_model_tester/0.8.0/",
+ "assets": {
+ "example": "src/v2_model_tester.ipynb",
+ "source": "src/v2_model_tester.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "v2_model_tester.py",
+ "image": "mlrun/mlrun",
+ "handler": "model_server_tester",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "v2-model-tester",
+ "description": "test v2 model servers",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "v2_model_tester.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "model-testing",
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/v2_model_tester/1.1.0/",
+ "assets": {
+ "example": "src/v2_model_tester.ipynb",
+ "source": "src/v2_model_tester.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "v2_model_tester.py",
+ "image": "mlrun/mlrun",
+ "handler": "model_server_tester",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "coxph-test",
+ "description": "Test cox proportional hazards model",
+ "labels": {
+ "author": "Iguazio",
+ "framework": "survival"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "coxph_test.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "machine-learning",
+ "model-testing"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/coxph_test/latest/",
+ "assets": {
+ "example": "src/coxph_test.ipynb",
+ "source": "src/coxph_test.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "coxph_test.py",
+ "image": "mlrun/ml-models",
+ "handler": "cox_test",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "coxph-test",
+ "description": "Test cox proportional hazards model",
+ "labels": {
+ "author": "Iguazio",
+ "framework": "survival"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "coxph_test.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "machine-learning",
+ "model-testing"
+ ],
+ "generationDate": "2021-05-19:22-41",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/coxph_test/0.0.1/",
+ "assets": {
+ "example": "src/coxph_test.ipynb",
+ "source": "src/coxph_test.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "coxph_test.py",
+ "image": "mlrun/ml-models",
+ "handler": "cox_test",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "coxph-test",
+ "description": "Test cox proportional hazards model",
+ "labels": {
+ "author": "Iguazio",
+ "framework": "survival"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "coxph_test.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "machine-learning",
+ "model-testing"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/coxph_test/0.9.0/",
+ "assets": {
+ "example": "src/coxph_test.ipynb",
+ "source": "src/coxph_test.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "coxph_test.py",
+ "image": "mlrun/ml-models",
+ "handler": "cox_test",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "coxph-test",
+ "description": "Test cox proportional hazards model",
+ "labels": {
+ "author": "Iguazio",
+ "framework": "survival"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.0.0",
+ "tag": "1.0.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "coxph_test.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "machine-learning",
+ "model-testing"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/coxph_test/1.0.0/",
+ "assets": {
+ "example": "src/coxph_test.ipynb",
+ "source": "src/coxph_test.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "coxph_test.py",
+ "image": "mlrun/ml-models",
+ "handler": "cox_test",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "coxph-test",
+ "description": "Test cox proportional hazards model",
+ "labels": {
+ "author": "Iguazio",
+ "framework": "survival"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "coxph_test.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "machine-learning",
+ "model-testing"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/coxph_test/0.8.0/",
+ "assets": {
+ "example": "src/coxph_test.ipynb",
+ "source": "src/coxph_test.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "coxph_test.py",
+ "image": "mlrun/ml-models",
+ "handler": "cox_test",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "coxph-test",
+ "description": "Test cox proportional hazards model",
+ "labels": {
+ "author": "Iguazio",
+ "framework": "survival"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "coxph_test.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "machine-learning",
+ "model-testing"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/coxph_test/1.1.0/",
+ "assets": {
+ "example": "src/coxph_test.ipynb",
+ "source": "src/coxph_test.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "coxph_test.py",
+ "image": "mlrun/ml-models",
+ "handler": "cox_test",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "virtual-drift",
+ "description": "Compute drift magnitude between Time-Samples T and U",
+ "labels": {
+ "author": "orz"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "virtual_drift.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-analysis",
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/virtual_drift/latest/",
+ "assets": {
+ "example": "src/virtual_drift.ipynb",
+ "source": "src/virtual_drift.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "virtual_drift.py",
+ "image": "mlrun/ml-models",
+ "handler": "drift_magnitude",
+ "requirements": [
+ "scikit-learn",
+ "scipy",
+ "v3io_frames"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "virtual-drift",
+ "description": "Compute drift magnitude between Time-Samples T and U",
+ "labels": {
+ "author": "orz"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "virtual_drift.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "data-analysis",
+ "machine-learning"
+ ],
+ "generationDate": "2021-05-19:23-13",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/virtual_drift/0.0.1/",
+ "assets": {
+ "example": "src/virtual_drift.ipynb",
+ "source": "src/virtual_drift.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "virtual_drift.py",
+ "image": "mlrun/ml-models",
+ "handler": "drift_magnitude",
+ "requirements": [
+ "scikit-learn",
+ "scipy",
+ "v3io_frames"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "virtual-drift",
+ "description": "Compute drift magnitude between Time-Samples T and U",
+ "labels": {
+ "author": "orz"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "virtual_drift.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "data-analysis",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/virtual_drift/0.9.0/",
+ "assets": {
+ "example": "src/virtual_drift.ipynb",
+ "source": "src/virtual_drift.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "virtual_drift.py",
+ "image": "mlrun/ml-models",
+ "handler": "drift_magnitude",
+ "requirements": [
+ "scikit-learn",
+ "scipy",
+ "v3io_frames"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "virtual-drift",
+ "description": "Compute drift magnitude between Time-Samples T and U",
+ "labels": {
+ "author": "orz"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "virtual_drift.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "data-analysis",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/virtual_drift/0.8.0/",
+ "assets": {
+ "example": "src/virtual_drift.ipynb",
+ "source": "src/virtual_drift.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "virtual_drift.py",
+ "image": "mlrun/ml-models",
+ "handler": "drift_magnitude",
+ "requirements": [
+ "scikit-learn",
+ "scipy",
+ "v3io_frames"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "virtual-drift",
+ "description": "Compute drift magnitude between Time-Samples T and U",
+ "labels": {
+ "author": "orz"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "virtual_drift.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-analysis",
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/virtual_drift/1.1.0/",
+ "assets": {
+ "example": "src/virtual_drift.ipynb",
+ "source": "src/virtual_drift.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "virtual_drift.py",
+ "image": "mlrun/ml-models",
+ "handler": "drift_magnitude",
+ "requirements": [
+ "scikit-learn",
+ "scipy",
+ "v3io_frames"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "rnn-serving",
+ "description": "deploy an rnn based stock analysis model server.",
+ "labels": {
+ "author": "Daniel"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "rnn_serving.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/rnn_serving/latest/",
+ "assets": {
+ "example": "src/rnn_serving.ipynb",
+ "source": "src/rnn_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "rnn_serving.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": null,
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "rnn-serving",
+ "description": "deploy an rnn based stock analysis model server.",
+ "labels": {
+ "author": "Daniel"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "rnn_serving.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-05-19:23-13",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/rnn_serving/0.0.1/",
+ "assets": {
+ "example": "src/rnn_serving.ipynb",
+ "source": "src/rnn_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "rnn_serving.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": [
+ "keras"
+ ],
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "rnn-serving",
+ "description": "deploy an rnn based stock analysis model server.",
+ "labels": {
+ "author": "Daniel"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "rnn_serving.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/rnn_serving/0.9.0/",
+ "assets": {
+ "example": "src/rnn_serving.ipynb",
+ "source": "src/rnn_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "rnn_serving.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": null,
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "rnn-serving",
+ "description": "deploy an rnn based stock analysis model server.",
+ "labels": {
+ "author": "Daniel"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.0.0",
+ "tag": "1.0.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "rnn_serving.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/rnn_serving/1.0.0/",
+ "assets": {
+ "example": "src/rnn_serving.ipynb",
+ "source": "src/rnn_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "rnn_serving.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": null,
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "rnn-serving",
+ "description": "deploy an rnn based stock analysis model server.",
+ "labels": {
+ "author": "Daniel"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "rnn_serving.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/rnn_serving/0.8.0/",
+ "assets": {
+ "example": "src/rnn_serving.ipynb",
+ "source": "src/rnn_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "rnn_serving.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": null,
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "rnn-serving",
+ "description": "deploy an rnn based stock analysis model server.",
+ "labels": {
+ "author": "Daniel"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "rnn_serving.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/rnn_serving/1.1.0/",
+ "assets": {
+ "example": "src/rnn_serving.ipynb",
+ "source": "src/rnn_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "rnn_serving.py",
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "requirements": null,
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "tf1-serving",
+ "description": "tf1 image classification server",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "tf1_serving.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/tf1_serving/latest/",
+ "assets": {
+ "example": "src/tf1_serving.ipynb",
+ "source": "src/tf1_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "tf1_serving.py",
+ "requirements": [],
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "env": {
+ "ENABLE_EXPLAINER": false,
+ "MODEL_CLASS": "TFModel"
+ },
+ "kind": "nuclio:serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "tf1-serving",
+ "description": "tf1 image classification server",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "tf1_serving.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-05-19:23-13",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/tf1_serving/0.0.1/",
+ "assets": {
+ "example": "src/tf1_serving.ipynb",
+ "source": "src/tf1_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "tf1_serving.py",
+ "requirements": [],
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "env": {
+ "MODEL_CLASS": "TFModel",
+ "ENABLE_EXPLAINER": false
+ },
+ "kind": "nuclio:serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "tf1-serving",
+ "description": "tf1 image classification server",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.1",
+ "tag": "0.9.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "tf1_serving.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/tf1_serving/0.9.1/",
+ "assets": {
+ "example": "src/tf1_serving.ipynb",
+ "source": "src/tf1_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "tf1_serving.py",
+ "requirements": [],
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "env": {
+ "ENABLE_EXPLAINER": false,
+ "MODEL_CLASS": "TFModel"
+ },
+ "kind": "nuclio:serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "tf1-serving",
+ "description": "tf1 image classification server",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "tf1_serving.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/tf1_serving/0.9.0/",
+ "assets": {
+ "example": "src/tf1_serving.ipynb",
+ "source": "src/tf1_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "tf1_serving.py",
+ "requirements": [],
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "env": {
+ "ENABLE_EXPLAINER": false,
+ "MODEL_CLASS": "TFModel"
+ },
+ "kind": "nuclio:serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "tf1-serving",
+ "description": "tf1 image classification server",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "tf1_serving.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/tf1_serving/0.8.0/",
+ "assets": {
+ "example": "src/tf1_serving.ipynb",
+ "source": "src/tf1_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "tf1_serving.py",
+ "requirements": [],
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "env": {
+ "ENABLE_EXPLAINER": false,
+ "MODEL_CLASS": "TFModel"
+ },
+ "kind": "nuclio:serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "tf1-serving",
+ "description": "tf1 image classification server",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "tf1_serving.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/tf1_serving/1.1.0/",
+ "assets": {
+ "example": "src/tf1_serving.ipynb",
+ "source": "src/tf1_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "tf1_serving.py",
+ "requirements": [],
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "env": {
+ "ENABLE_EXPLAINER": false,
+ "MODEL_CLASS": "TFModel"
+ },
+ "kind": "nuclio:serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "model-monitoring-batch",
+ "description": "",
+ "labels": {},
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "model_monitoring_batch.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "monitoring"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/model_monitoring_batch/latest/",
+ "assets": {
+ "example": "src/model_monitoring_batch.ipynb",
+ "source": "src/model_monitoring_batch.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "model_monitoring_batch.py",
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "model-monitoring-batch",
+ "description": "",
+ "labels": {},
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "model_monitoring_batch.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "monitoring"
+ ],
+ "generationDate": "2021-05-19:23-13",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/model_monitoring_batch/0.0.1/",
+ "assets": {
+ "example": "src/model_monitoring_batch.ipynb",
+ "source": "src/model_monitoring_batch.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "model_monitoring_batch.py",
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "model-monitoring-batch",
+ "description": "",
+ "labels": {},
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.1",
+ "tag": "0.9.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "model_monitoring_batch.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "monitoring"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/model_monitoring_batch/0.9.1/",
+ "assets": {
+ "example": "src/model_monitoring_batch.ipynb",
+ "source": "src/model_monitoring_batch.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "model_monitoring_batch.py",
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "model-monitoring-batch",
+ "description": "",
+ "labels": {},
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "model_monitoring_batch.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "monitoring"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/model_monitoring_batch/0.9.0/",
+ "assets": {
+ "example": "src/model_monitoring_batch.ipynb",
+ "source": "src/model_monitoring_batch.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "model_monitoring_batch.py",
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "model-monitoring-batch",
+ "description": "",
+ "labels": {},
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "model_monitoring_batch.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "monitoring"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/model_monitoring_batch/0.8.0/",
+ "assets": {
+ "example": "src/model_monitoring_batch.ipynb",
+ "source": "src/model_monitoring_batch.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "model_monitoring_batch.py",
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "model-monitoring-batch",
+ "description": "",
+ "labels": {},
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "model_monitoring_batch.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "monitoring"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/model_monitoring_batch/1.1.0/",
+ "assets": {
+ "example": "src/model_monitoring_batch.ipynb",
+ "source": "src/model_monitoring_batch.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "model_monitoring_batch.py",
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "open-archive",
+ "description": "Open a file/object archive into a target directory",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "open_archive.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-preparation"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/open_archive/latest/",
+ "assets": {
+ "example": "src/open_archive.ipynb",
+ "source": "src/open_archive.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "open_archive.py",
+ "image": "mlrun/mlrun",
+ "handler": "open_archive",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "open-archive",
+ "description": "Open a file/object archive into a target directory",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "open_archive.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "data-preparation"
+ ],
+ "generationDate": "2021-05-19:23-13",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/open_archive/0.0.1/",
+ "assets": {
+ "example": "src/open_archive.ipynb",
+ "source": "src/open_archive.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "open_archive.py",
+ "image": "mlrun/mlrun",
+ "handler": "open_archive",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "open-archive",
+ "description": "Open a file/object archive into a target directory",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "open_archive.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "data-preparation"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/open_archive/0.9.0/",
+ "assets": {
+ "example": "src/open_archive.ipynb",
+ "source": "src/open_archive.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "open_archive.py",
+ "image": "mlrun/mlrun",
+ "handler": "open_archive",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "open-archive",
+ "description": "Open a file/object archive into a target directory",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "open_archive.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "data-preparation"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/open_archive/0.8.0/",
+ "assets": {
+ "example": "src/open_archive.ipynb",
+ "source": "src/open_archive.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "open_archive.py",
+ "image": "mlrun/mlrun",
+ "handler": "open_archive",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "open-archive",
+ "description": "Open a file/object archive into a target directory",
+ "labels": {
+ "author": "yaronh"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "open_archive.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-preparation"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/open_archive/1.1.0/",
+ "assets": {
+ "example": "src/open_archive.ipynb",
+ "source": "src/open_archive.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "open_archive.py",
+ "image": "mlrun/mlrun",
+ "handler": "open_archive",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "onnx-utils",
+ "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.",
+ "labels": {
+ "author": "guyl"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.1",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "onnx_utils.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "utils"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/onnx_utils/latest/",
+ "assets": {
+ "example": "src/onnx_utils.ipynb",
+ "source": "src/onnx_utils.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "onnx_utils.py",
+ "requirements": [
+ "onnx~=1.13.0",
+ "onnxruntime~=1.14.0",
+ "onnxoptimizer~=0.3.0",
+ "onnxmltools~=1.11.0",
+ "tf2onnx~=1.13.0"
+ ],
+ "image": "mlrun/ml-models",
+ "handler": "to_onnx",
+ "kind": "job",
+ "extra_spec": {
+ "allow_empty_resources": true,
+ "build": {
+ "auto_build": true,
+ "with_mlrun": false
+ }
+ }
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "onnx-utils",
+ "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.",
+ "labels": {
+ "author": "guyl"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.1",
+ "tag": "1.1.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "onnx_utils.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "utils"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/onnx_utils/1.1.1/",
+ "assets": {
+ "example": "src/onnx_utils.ipynb",
+ "source": "src/onnx_utils.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "onnx_utils.py",
+ "requirements": [
+ "onnx~=1.13.0",
+ "onnxruntime~=1.14.0",
+ "onnxoptimizer~=0.3.0",
+ "onnxmltools~=1.11.0",
+ "tf2onnx~=1.13.0"
+ ],
+ "image": "mlrun/ml-models",
+ "handler": "to_onnx",
+ "kind": "job",
+ "extra_spec": {
+ "allow_empty_resources": true,
+ "build": {
+ "auto_build": true,
+ "with_mlrun": false
+ }
+ }
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "onnx-utils",
+ "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.",
+ "labels": {
+ "author": "guyl"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.10.2",
+ "tag": "0.10.2",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "onnx_utils.ipynb",
+ "mlrunVersion": "0.10.0",
+ "categories": [
+ "utils"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/onnx_utils/0.10.2/",
+ "assets": {
+ "example": "src/onnx_utils.ipynb",
+ "source": "src/onnx_utils.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "onnx_utils.py",
+ "image": "mlrun/ml-models",
+ "handler": "to_onnx",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "onnx-utils",
+ "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.",
+ "labels": {
+ "author": "guyl"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "onnx_utils.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "utils"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/onnx_utils/0.9.0/",
+ "assets": {
+ "example": "src/onnx_utils.ipynb",
+ "source": "src/onnx_utils.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "onnx_utils.py",
+ "image": "mlrun/ml-models",
+ "handler": "to_onnx",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "onnx-utils",
+ "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.",
+ "labels": {
+ "author": "guyl"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "onnx_utils.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "utils"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/onnx_utils/0.8.0/",
+ "assets": {
+ "example": "src/onnx_utils.ipynb",
+ "source": "src/onnx_utils.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "onnx_utils.py",
+ "image": "mlrun/ml-models",
+ "handler": "to_onnx",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "onnx-utils",
+ "description": "ONNX intigration in MLRun, some utils functions for the ONNX framework, optimizing and converting models from different framework to ONNX using MLRun.",
+ "labels": {
+ "author": "guyl"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "onnx_utils.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "utils"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/onnx_utils/1.1.0/",
+ "assets": {
+ "example": "src/onnx_utils.ipynb",
+ "source": "src/onnx_utils.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "onnx_utils.py",
+ "requirements": [
+ "onnx~=1.10.1",
+ "onnxruntime~=1.8.1",
+ "onnxoptimizer~=0.2.0",
+ "onnxmltools~=1.9.0",
+ "tf2onnx~=1.9.0"
+ ],
+ "image": "mlrun/ml-models",
+ "handler": "to_onnx",
+ "kind": "job",
+ "extra_spec": {
+ "allow_empty_resources": true,
+ "build": {
+ "auto_build": true,
+ "with_mlrun": false
+ }
+ }
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "gen-class-data",
+ "description": "Create a binary classification sample dataset and save.",
+ "labels": {
+ "author": "Daniel"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "gen_class_data.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-preparation"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/gen_class_data/latest/",
+ "assets": {
+ "example": "src/gen_class_data.ipynb",
+ "source": "src/gen_class_data.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "gen_class_data.py",
+ "image": "mlrun/mlrun",
+ "handler": "gen_class_data",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "gen-class-data",
+ "description": "Create a binary classification sample dataset and save.",
+ "labels": {
+ "author": "Daniel"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.0.0",
+ "example": "gen_class_data.ipynb",
+ "mlrunVersion": "0.6.2",
+ "categories": [
+ "data-preparation"
+ ],
+ "generationDate": "2021-05-19:22-41",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/gen_class_data/0.0.1/",
+ "assets": {
+ "example": "src/gen_class_data.ipynb",
+ "source": "src/gen_class_data.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "gen_class_data.py",
+ "image": "mlrun/mlrun",
+ "handler": "gen_class_data",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "gen-class-data",
+ "description": "Create a binary classification sample dataset and save.",
+ "labels": {
+ "author": "Daniel"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "gen_class_data.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "data-preparation"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/gen_class_data/0.9.0/",
+ "assets": {
+ "example": "src/gen_class_data.ipynb",
+ "source": "src/gen_class_data.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "gen_class_data.py",
+ "image": "mlrun/mlrun",
+ "handler": "gen_class_data",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "gen-class-data",
+ "description": "Create a binary classification sample dataset and save.",
+ "labels": {
+ "author": "Daniel"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "gen_class_data.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "data-preparation"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/gen_class_data/0.8.0/",
+ "assets": {
+ "example": "src/gen_class_data.ipynb",
+ "source": "src/gen_class_data.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "gen_class_data.py",
+ "image": "mlrun/mlrun",
+ "handler": "gen_class_data",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "gen-class-data",
+ "description": "Create a binary classification sample dataset and save.",
+ "labels": {
+ "author": "Daniel"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.10.0",
+ "tag": "0.10.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "gen_class_data.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "data-preparation"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/gen_class_data/0.10.0/",
+ "assets": {
+ "example": "src/gen_class_data.ipynb",
+ "source": "src/gen_class_data.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "gen_class_data.py",
+ "image": "mlrun/mlrun",
+ "handler": "gen_class_data",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "gen-class-data",
+ "description": "Create a binary classification sample dataset and save.",
+ "labels": {
+ "author": "Daniel"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "gen_class_data.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-preparation"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/gen_class_data/1.1.0/",
+ "assets": {
+ "example": "src/gen_class_data.ipynb",
+ "source": "src/gen_class_data.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "gen_class_data.py",
+ "image": "mlrun/mlrun",
+ "handler": "gen_class_data",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "azureml-utils",
+ "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.2.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "azureml_utils.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "machine-learning",
+ "model-training"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/azureml_utils/latest/",
+ "assets": {
+ "example": "src/azureml_utils.ipynb",
+ "source": "src/azureml_utils.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "azureml_utils.py",
+ "requirements": [
+ "azureml-core==1.40.0",
+ "azureml-train-automl-client==1.40.0",
+ "plotly~=5.4"
+ ],
+ "image": "python:3.7.9-slim",
+ "handler": "train",
+ "kind": "job",
+ "extra_spec": {
+ "allow_empty_resources": true,
+ "build": {
+ "auto_build": true,
+ "commands": [
+ "python -m pip install pip==22.1.2",
+ "apt-get update && apt-get install -y --no-install-recommends git"
+ ],
+ "with_mlrun": true
+ }
+ }
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "azureml-utils",
+ "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.4",
+ "tag": "0.9.4",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "azureml_utils.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "machine-learning",
+ "model-training"
+ ],
+ "generationDate": "2021-11-13:00-15",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/azureml_utils/0.9.4/",
+ "assets": {
+ "example": "src/azureml_utils.ipynb",
+ "source": "src/azureml_utils.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "azureml_utils.py",
+ "requirements": [
+ "azureml-core==1.33.0",
+ "azureml-train-automl-client==1.33.0",
+ "plotly~=5.4"
+ ],
+ "image": "python:3.7.9-slim",
+ "handler": "train",
+ "kind": "job",
+ "extra_spec": {
+ "build": {
+ "commands": [
+ "python -m pip install pip==21.2.4",
+ "apt-get update && apt-get install -y --no-install-recommends git"
+ ],
+ "with_mlrun": true,
+ "auto_build": true
+ },
+ "allow_empty_resources": true
+ }
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "azureml-utils",
+ "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "azureml_utils.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "machine-learning",
+ "model-training"
+ ],
+ "generationDate": "2021-11-13:00-15",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/azureml_utils/0.9.0/",
+ "assets": {
+ "example": "src/azureml_utils.ipynb",
+ "source": "src/azureml_utils.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "azureml_utils.py",
+ "commands": null,
+ "requirements": [
+ "azureml-core==1.33.0",
+ "azureml-train-automl-client==1.33.0"
+ ],
+ "image": "",
+ "handler": "train",
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "azureml-utils",
+ "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.2.0",
+ "tag": "1.2.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "azureml_utils.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "machine-learning",
+ "model-training"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/azureml_utils/1.2.0/",
+ "assets": {
+ "example": "src/azureml_utils.ipynb",
+ "source": "src/azureml_utils.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "azureml_utils.py",
+ "requirements": [
+ "azureml-core==1.40.0",
+ "azureml-train-automl-client==1.40.0",
+ "plotly~=5.4"
+ ],
+ "image": "python:3.7.9-slim",
+ "handler": "train",
+ "kind": "job",
+ "extra_spec": {
+ "allow_empty_resources": true,
+ "build": {
+ "auto_build": true,
+ "commands": [
+ "python -m pip install pip==22.1.2",
+ "apt-get update && apt-get install -y --no-install-recommends git"
+ ],
+ "with_mlrun": true
+ }
+ }
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "azureml-utils",
+ "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.5",
+ "tag": "0.9.5",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "azureml_utils.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "machine-learning",
+ "model-training"
+ ],
+ "generationDate": "2021-04-20:15-18",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/azureml_utils/0.9.5/",
+ "assets": {
+ "example": "src/azureml_utils.ipynb",
+ "source": "src/azureml_utils.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "azureml_utils.py",
+ "requirements": [
+ "azureml-core==1.40.0",
+ "azureml-train-automl-client==1.40.0",
+ "plotly~=5.4"
+ ],
+ "image": "python:3.7.9-slim",
+ "handler": "train",
+ "kind": "job",
+ "extra_spec": {
+ "build": {
+ "commands": [
+ "python -m pip install pip==21.2.4",
+ "apt-get update && apt-get install -y --no-install-recommends git"
+ ],
+ "with_mlrun": true,
+ "auto_build": true
+ },
+ "allow_empty_resources": true
+ }
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "azureml-utils",
+ "description": "Azure AutoML integration in MLRun, including utils functions for training models on Azure AutoML platfrom.",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "azureml_utils.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "machine-learning",
+ "model-training"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/azureml_utils/1.1.0/",
+ "assets": {
+ "example": "src/azureml_utils.ipynb",
+ "source": "src/azureml_utils.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "azureml_utils.py",
+ "requirements": [
+ "azureml-core==1.40.0",
+ "azureml-train-automl-client==1.40.0",
+ "plotly~=5.4"
+ ],
+ "image": "python:3.7.9-slim",
+ "handler": "train",
+ "kind": "job",
+ "extra_spec": {
+ "allow_empty_resources": true,
+ "build": {
+ "auto_build": true,
+ "commands": [
+ "python -m pip install pip==22.1.2",
+ "apt-get update && apt-get install -y --no-install-recommends git"
+ ],
+ "with_mlrun": true
+ }
+ }
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "churn-server",
+ "description": "churn classification and predictor",
+ "labels": {
+ "author": "Iguazio",
+ "framework": "churn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "churn_server.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/churn_server/latest/",
+ "assets": {
+ "example": "src/churn_server.ipynb",
+ "source": "src/churn_server.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "churn_server.py",
+ "requirements": [
+ "xgboost==1.3.1",
+ "lifelines==0.22.8"
+ ],
+ "customFields": {
+ "default_class": "ChurnModel"
+ },
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "env": {
+ "ENABLE_EXPLAINER": "False"
+ },
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "churn-server",
+ "description": "churn classification and predictor",
+ "labels": {
+ "author": "Iguazio",
+ "framework": "churn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "churn_server.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-05-19:22-04",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/churn_server/0.0.1/",
+ "assets": {
+ "example": "src/churn_server.ipynb",
+ "source": "src/churn_server.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "churn_server.py",
+ "requirements": [],
+ "image": "mlrun/ml-models",
+ "customFields": {
+ "default_class": "ChurnModel"
+ },
+ "handler": "handler",
+ "env": {
+ "ENABLE_EXPLAINER": "False"
+ },
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "churn-server",
+ "description": "churn classification and predictor",
+ "labels": {
+ "author": "Iguazio",
+ "framework": "churn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "churn_server.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/churn_server/0.9.0/",
+ "assets": {
+ "example": "src/churn_server.ipynb",
+ "source": "src/churn_server.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "churn_server.py",
+ "requirements": [
+ "xgboost==1.3.1",
+ "lifelines==0.22.8"
+ ],
+ "customFields": {
+ "default_class": "ChurnModel"
+ },
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "env": {
+ "ENABLE_EXPLAINER": "False"
+ },
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "churn-server",
+ "description": "churn classification and predictor",
+ "labels": {
+ "author": "Iguazio",
+ "framework": "churn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.0.0",
+ "tag": "1.0.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "churn_server.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/churn_server/1.0.0/",
+ "assets": {
+ "example": "src/churn_server.ipynb",
+ "source": "src/churn_server.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "churn_server.py",
+ "requirements": [
+ "xgboost==1.3.1",
+ "lifelines==0.22.8"
+ ],
+ "customFields": {
+ "default_class": "ChurnModel"
+ },
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "env": {
+ "ENABLE_EXPLAINER": "False"
+ },
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "churn-server",
+ "description": "churn classification and predictor",
+ "labels": {
+ "author": "Iguazio",
+ "framework": "churn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "churn_server.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/churn_server/0.8.0/",
+ "assets": {
+ "example": "src/churn_server.ipynb",
+ "source": "src/churn_server.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "churn_server.py",
+ "requirements": [
+ "xgboost==1.3.1",
+ "lifelines==0.22.8"
+ ],
+ "customFields": {
+ "default_class": "ChurnModel"
+ },
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "env": {
+ "ENABLE_EXPLAINER": "False"
+ },
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "churn-server",
+ "description": "churn classification and predictor",
+ "labels": {
+ "author": "Iguazio",
+ "framework": "churn"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "churn_server.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/churn_server/1.1.0/",
+ "assets": {
+ "example": "src/churn_server.ipynb",
+ "source": "src/churn_server.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "churn_server.py",
+ "requirements": [
+ "xgboost==1.3.1",
+ "lifelines==0.22.8"
+ ],
+ "customFields": {
+ "default_class": "ChurnModel"
+ },
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "env": {
+ "ENABLE_EXPLAINER": "False"
+ },
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "describe-spark",
+ "description": "",
+ "labels": {},
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "describe_spark.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-analysis"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/describe_spark/latest/",
+ "assets": {
+ "example": "src/describe_spark.ipynb",
+ "source": "src/describe_spark.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "describe_spark.py",
+ "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf",
+ "handler": "describe_spark",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "describe-spark",
+ "description": "",
+ "labels": {},
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "describe_spark.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "data-analysis"
+ ],
+ "generationDate": "2021-05-19:22-41",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/describe_spark/0.0.1/",
+ "assets": {
+ "example": "src/describe_spark.ipynb",
+ "source": "src/describe-spark.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "describe-spark.py",
+ "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf",
+ "handler": "describe_spark",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "describe-spark",
+ "description": "",
+ "labels": {},
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.1",
+ "tag": "0.9.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "describe_spark.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "data-analysis"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/describe_spark/0.9.1/",
+ "assets": {
+ "example": "src/describe_spark.ipynb",
+ "source": "src/describe_spark.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "describe_spark.py",
+ "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf",
+ "handler": "describe_spark",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "describe-spark",
+ "description": "",
+ "labels": {},
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "describe_spark.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "data-analysis"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/describe_spark/0.9.0/",
+ "assets": {
+ "example": "src/describe_spark.ipynb",
+ "source": "src/describe-spark.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "describe-spark.py",
+ "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf",
+ "handler": "describe_spark",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "describe-spark",
+ "description": "",
+ "labels": {},
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "describe_spark.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "data-analysis"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/describe_spark/0.8.0/",
+ "assets": {
+ "example": "src/describe_spark.ipynb",
+ "source": "src/describe-spark.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "describe-spark.py",
+ "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf",
+ "handler": "describe_spark",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "describe-spark",
+ "description": "",
+ "labels": {},
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "describe_spark.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-analysis"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/describe_spark/1.1.0/",
+ "assets": {
+ "example": "src/describe_spark.ipynb",
+ "source": "src/describe_spark.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "describe_spark.py",
+ "image": "iguazio/shell:3.0_b5565_20201026062233_wsdf",
+ "handler": "describe_spark",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "model-monitoring-stream",
+ "description": "",
+ "labels": {},
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "model_monitoring_stream.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "monitoring"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/model_monitoring_stream/latest/",
+ "assets": {
+ "example": "src/model_monitoring_stream.ipynb",
+ "source": "src/model_monitoring_stream.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "model_monitoring_stream.py",
+ "image": "livsmichael/mlrun-api:automation",
+ "handler": "handler",
+ "requirements": [],
+ "kind": "nuclio"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "model-monitoring-stream",
+ "description": "",
+ "labels": {},
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "model_monitoring_stream.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "monitoring"
+ ],
+ "generationDate": "2021-05-19:23-13",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/model_monitoring_stream/0.0.1/",
+ "assets": {
+ "example": "src/model_monitoring_stream.ipynb",
+ "source": "src/model_monitoring_stream.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "model_monitoring_stream.py",
+ "image": "mlrun/mlrun",
+ "handler": "handler",
+ "requirements": [],
+ "kind": "nuclio"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "model-monitoring-stream",
+ "description": "",
+ "labels": {},
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.1",
+ "tag": "0.9.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "model_monitoring_stream.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "monitoring"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/model_monitoring_stream/0.9.1/",
+ "assets": {
+ "example": "src/model_monitoring_stream.ipynb",
+ "source": "src/model_monitoring_stream.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "model_monitoring_stream.py",
+ "image": "livsmichael/mlrun-api:automation",
+ "handler": "handler",
+ "requirements": [],
+ "kind": "nuclio"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "model-monitoring-stream",
+ "description": "",
+ "labels": {},
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "model_monitoring_stream.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "monitoring"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/model_monitoring_stream/0.9.0/",
+ "assets": {
+ "example": "src/model_monitoring_stream.ipynb",
+ "source": "src/model_monitoring_stream.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "model_monitoring_stream.py",
+ "image": "livsmichael/mlrun-api:automation",
+ "handler": "handler",
+ "requirements": [],
+ "kind": "nuclio"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "model-monitoring-stream",
+ "description": "",
+ "labels": {},
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "model_monitoring_stream.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "monitoring"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/model_monitoring_stream/0.8.0/",
+ "assets": {
+ "example": "src/model_monitoring_stream.ipynb",
+ "source": "src/model_monitoring_stream.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "model_monitoring_stream.py",
+ "image": "livsmichael/mlrun-api:automation",
+ "handler": "handler",
+ "requirements": [],
+ "kind": "nuclio"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "model-monitoring-stream",
+ "description": "",
+ "labels": {},
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "model_monitoring_stream.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "monitoring"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/model_monitoring_stream/1.1.0/",
+ "assets": {
+ "example": "src/model_monitoring_stream.ipynb",
+ "source": "src/model_monitoring_stream.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "model_monitoring_stream.py",
+ "image": "livsmichael/mlrun-api:automation",
+ "handler": "handler",
+ "requirements": [],
+ "kind": "nuclio"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "send-email",
+ "description": "Send Email messages through SMTP server",
+ "labels": {
+ "author": "saarc"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "send_email.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "utils"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/send_email/latest/",
+ "assets": {
+ "example": "src/send_email.ipynb",
+ "source": "src/send_email.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "send_email.py",
+ "image": "mlrun/ml-models",
+ "handler": "send_email",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "send-email",
+ "description": "Send Email messages through SMTP server",
+ "labels": {
+ "author": "saarc"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "example": "send_email.ipynb",
+ "mlrunVersion": "",
+ "categories": [
+ "utils"
+ ],
+ "generationDate": "2021-05-19:23-13",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/send_email/0.0.1/",
+ "assets": {
+ "example": "src/send_email.ipynb",
+ "source": "src/send_email.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "send_email.py",
+ "image": "mlrun/ml-models",
+ "handler": "send_email",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "send-email",
+ "description": "Send Email messages through SMTP server",
+ "labels": {
+ "author": "saarc"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "send_email.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "utils"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/send_email/0.9.0/",
+ "assets": {
+ "example": "src/send_email.ipynb",
+ "source": "src/send_email.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "send_email.py",
+ "image": "mlrun/ml-models",
+ "handler": "send_email",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "send-email",
+ "description": "Send Email messages through SMTP server",
+ "labels": {
+ "author": "saarc"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "send_email.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "utils"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/send_email/0.8.0/",
+ "assets": {
+ "example": "src/send_email.ipynb",
+ "source": "src/send_email.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "send_email.py",
+ "image": "mlrun/ml-models",
+ "handler": "send_email",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "send-email",
+ "description": "Send Email messages through SMTP server",
+ "labels": {
+ "author": "saarc"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "send_email.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "utils"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/send_email/1.1.0/",
+ "assets": {
+ "example": "src/send_email.ipynb",
+ "source": "src/send_email.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "send_email.py",
+ "image": "mlrun/ml-models",
+ "handler": "send_email",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "arc-to-parquet",
+ "description": "retrieve remote archive, open and save as parquet",
+ "labels": {
+ "author": "yjb"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.2.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "arc_to_parquet.ipynb",
+ "mlrunVersion": "1.2.0",
+ "categories": [
+ "etl"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/arc_to_parquet/latest/",
+ "assets": {
+ "example": "src/arc_to_parquet.ipynb",
+ "source": "src/arc_to_parquet.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "arc_to_parquet.py",
+ "image": "mlrun/ml-base",
+ "handler": "arc_to_parquet",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "arc-to-parquet",
+ "description": "retrieve remote archive, open and save as parquet",
+ "labels": {
+ "author": "yjb"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "2.10.0",
+ "example": "arc_to_parquet.ipynb",
+ "mlrunVersion": "0.5.4",
+ "categories": [
+ "etl"
+ ],
+ "generationDate": "2021-05-19:22-04",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/arc_to_parquet/0.0.1/",
+ "assets": {
+ "example": "src/arc_to_parquet.ipynb",
+ "source": "src/arc_to_parquet.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "arc_to_parquet.py",
+ "image": "mlrun/ml-base",
+ "handler": "arc_to_parquet",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "arc-to-parquet",
+ "description": "retrieve remote archive, open and save as parquet",
+ "labels": {
+ "author": "yjb"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "arc_to_parquet.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "etl"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/arc_to_parquet/0.9.0/",
+ "assets": {
+ "example": "src/arc_to_parquet.ipynb",
+ "source": "src/arc_to_parquet.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "arc_to_parquet.py",
+ "image": "mlrun/ml-base",
+ "handler": "arc_to_parquet",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "arc-to-parquet",
+ "description": "retrieve remote archive, open and save as parquet",
+ "labels": {
+ "author": "yjb"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.2.0",
+ "tag": "1.2.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "arc_to_parquet.ipynb",
+ "mlrunVersion": "1.2.0",
+ "categories": [
+ "etl"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/arc_to_parquet/1.2.0/",
+ "assets": {
+ "example": "src/arc_to_parquet.ipynb",
+ "source": "src/arc_to_parquet.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "arc_to_parquet.py",
+ "image": "mlrun/ml-base",
+ "handler": "arc_to_parquet",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "arc-to-parquet",
+ "description": "retrieve remote archive, open and save as parquet",
+ "labels": {
+ "author": "yjb"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.8.0",
+ "tag": "0.8.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "arc_to_parquet.ipynb",
+ "mlrunVersion": "0.8.0",
+ "categories": [
+ "etl"
+ ],
+ "generationDate": "2021-11-18:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/arc_to_parquet/0.8.0/",
+ "assets": {
+ "example": "src/arc_to_parquet.ipynb",
+ "source": "src/arc_to_parquet.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "arc_to_parquet.py",
+ "image": "mlrun/ml-base",
+ "handler": "arc_to_parquet",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "arc-to-parquet",
+ "description": "retrieve remote archive, open and save as parquet",
+ "labels": {
+ "author": "yjb"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "example": "arc_to_parquet.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "etl"
+ ],
+ "generationDate": "2022-08-28:17-25",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/arc_to_parquet/1.1.0/",
+ "assets": {
+ "example": "src/arc_to_parquet.ipynb",
+ "source": "src/arc_to_parquet.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "arc_to_parquet.py",
+ "image": "mlrun/ml-base",
+ "handler": "arc_to_parquet",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "snowflake-dask",
+ "description": "Snowflake Dask - Ingest snowflake data in parallel with Dask cluster",
+ "labels": {
+ "author": "xingsheng",
+ "framework": "dask"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "snowflake-dask-mlrun.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-preparation"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/snowflake_dask/latest/",
+ "assets": {
+ "example": "src/snowflake-dask-mlrun.ipynb",
+ "source": "src/snowflake_dask.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "snowflake_dask.py",
+ "image": "mlrun/mlrun",
+ "handler": "load_results",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "snowflake-dask",
+ "description": "Snowflake Dask - Ingest snowflake data in parallel with Dask cluster",
+ "labels": {
+ "author": "xingsheng",
+ "framework": "dask"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.9.0",
+ "tag": "0.9.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.2.0",
+ "example": "snowflake-dask-mlrun.ipynb",
+ "mlrunVersion": "0.9.1",
+ "categories": [
+ "data-preparation"
+ ],
+ "generationDate": "2022-03-20:12-28",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/snowflake_dask/0.9.0/",
+ "assets": {
+ "example": "src/snowflake-dask-mlrun.ipynb",
+ "source": "src/snowflake_dask.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "snowflake_dask.py",
+ "image": "mlrun/mlrun",
+ "handler": "load_results",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "snowflake-dask",
+ "description": "Snowflake Dask - Ingest snowflake data in parallel with Dask cluster",
+ "labels": {
+ "author": "xingsheng",
+ "framework": "dask"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "snowflake-dask-mlrun.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-preparation"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/snowflake_dask/1.1.0/",
+ "assets": {
+ "example": "src/snowflake-dask-mlrun.ipynb",
+ "source": "src/snowflake_dask.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "snowflake_dask.py",
+ "image": "mlrun/mlrun",
+ "handler": "load_results",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "azureml-serving",
+ "description": "AzureML serving function",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "azureml_serving.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "machine-learning",
+ "model-serving"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/azureml_serving/latest/",
+ "assets": {
+ "example": "src/azureml_serving.ipynb",
+ "source": "src/azureml_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "customFields": {
+ "default_class": "mlrun.frameworks.sklearn.PickleModelServer"
+ },
+ "filename": "azureml_serving.py",
+ "image": "mlrun/mlrun",
+ "requirements": [
+ "azureml-automl-runtime~=1.38.1"
+ ],
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "azureml-serving",
+ "description": "AzureML serving function",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "azureml_serving.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "machine-learning",
+ "model-serving"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/azureml_serving/1.1.0/",
+ "assets": {
+ "example": "src/azureml_serving.ipynb",
+ "source": "src/azureml_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "customFields": {
+ "default_class": "mlrun.frameworks.sklearn.PickleModelServer"
+ },
+ "filename": "azureml_serving.py",
+ "image": "mlrun/mlrun",
+ "requirements": [
+ "azureml-automl-runtime~=1.38.1"
+ ],
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "batch-inference",
+ "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.",
+ "labels": {
+ "author": "guyl"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.4.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "batch_inference.ipynb",
+ "mlrunVersion": "1.2.0",
+ "categories": [
+ "utils"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/batch_inference/latest/",
+ "assets": {
+ "example": "src/batch_inference.ipynb",
+ "source": "src/batch_inference.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "batch_inference.py",
+ "requirements": null,
+ "image": "mlrun/mlrun",
+ "handler": "infer",
+ "kind": "job",
+ "extra_spec": {
+ "allow_empty_resources": true,
+ "build": {
+ "auto_build": false,
+ "with_mlrun": false
+ }
+ }
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "batch-inference",
+ "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.",
+ "labels": {
+ "author": "guyl"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.1",
+ "tag": "1.1.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "example": "batch_inference.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "utils"
+ ],
+ "generationDate": "2022-08-28:17-25",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/batch_inference/1.1.1/",
+ "assets": {
+ "example": "src/batch_inference.ipynb",
+ "source": "src/batch_inference.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "batch_inference.py",
+ "requirements": [
+ "scikit-learn",
+ "plotly"
+ ],
+ "image": "mlrun/ml-models",
+ "handler": "infer",
+ "kind": "job",
+ "extra_spec": {
+ "allow_empty_resources": true,
+ "build": {
+ "auto_build": true,
+ "with_mlrun": false
+ }
+ }
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "batch-inference",
+ "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.",
+ "labels": {
+ "author": "guyl"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.4.0",
+ "tag": "1.4.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "batch_inference.ipynb",
+ "mlrunVersion": "1.2.0",
+ "categories": [
+ "utils"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/batch_inference/1.4.0/",
+ "assets": {
+ "example": "src/batch_inference.ipynb",
+ "source": "src/batch_inference.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "batch_inference.py",
+ "requirements": null,
+ "image": "mlrun/mlrun",
+ "handler": "infer",
+ "kind": "job",
+ "extra_spec": {
+ "allow_empty_resources": true,
+ "build": {
+ "auto_build": false,
+ "with_mlrun": false
+ }
+ }
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "batch-inference",
+ "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.",
+ "labels": {
+ "author": "guyl"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.2.0",
+ "tag": "1.2.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "batch_inference.ipynb",
+ "mlrunVersion": "1.2.0",
+ "categories": [
+ "utils"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/batch_inference/1.2.0/",
+ "assets": {
+ "example": "src/batch_inference.ipynb",
+ "source": "src/batch_inference.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "batch_inference.py",
+ "requirements": null,
+ "image": "mlrun/ml-models",
+ "handler": "infer",
+ "kind": "job",
+ "extra_spec": {
+ "allow_empty_resources": true,
+ "build": {
+ "auto_build": false,
+ "with_mlrun": false
+ }
+ }
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "batch-inference",
+ "description": "Batch inference (also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.",
+ "labels": {
+ "author": "guyl"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.3.0",
+ "tag": "1.3.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "batch_inference.ipynb",
+ "mlrunVersion": "1.2.0",
+ "categories": [
+ "utils"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/batch_inference/1.3.0/",
+ "assets": {
+ "example": "src/batch_inference.ipynb",
+ "source": "src/batch_inference.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "batch_inference.py",
+ "requirements": null,
+ "image": "mlrun/ml-models",
+ "handler": "infer",
+ "kind": "job",
+ "extra_spec": {
+ "allow_empty_resources": true,
+ "build": {
+ "auto_build": false,
+ "with_mlrun": false
+ }
+ }
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "batch-inference",
+ "description": "Batch inference ( also knows as prediction) for the common ML frameworks (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.",
+ "labels": {
+ "author": "guyl"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "example": "batch_inference.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "utils"
+ ],
+ "generationDate": "2022-08-28:17-25",
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/batch_inference/1.1.0/",
+ "assets": {
+ "example": "src/batch_inference.ipynb",
+ "source": "src/batch_inference.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "batch_inference.py",
+ "requirements": [
+ "scikit-learn",
+ "plotly"
+ ],
+ "image": "mlrun/ml-models",
+ "handler": "infer",
+ "kind": "job",
+ "extra_spec": {
+ "allow_empty_resources": true,
+ "build": {
+ "auto_build": true,
+ "with_mlrun": false
+ }
+ }
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "hugging-face-serving",
+ "description": "Generic Hugging Face model server.",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.0.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "generationDate": "2022-09-05:17-00",
+ "example": "hugging_face_serving.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/hugging_face_serving/latest/",
+ "assets": {
+ "example": "src/hugging_face_serving.ipynb",
+ "source": "src/hugging_face_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "hugging_face_serving.py",
+ "requirements": [
+ "transformers==4.21.3",
+ "tensorflow==2.9.2"
+ ],
+ "customFields": {
+ "default_class": "HuggingFaceModelServer"
+ },
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "hugging-face-serving",
+ "description": "Generic Hugging Face model server.",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.0.0",
+ "tag": "1.0.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "",
+ "generationDate": "2022-09-05:17-00",
+ "example": "hugging_face_serving.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "model-serving",
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/hugging_face_serving/1.0.0/",
+ "assets": {
+ "example": "src/hugging_face_serving.ipynb",
+ "source": "src/hugging_face_serving.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "hugging_face_serving.py",
+ "requirements": [
+ "transformers==4.21.3",
+ "tensorflow==2.9.2"
+ ],
+ "customFields": {
+ "default_class": "HuggingFaceModelServer"
+ },
+ "image": "mlrun/ml-models",
+ "handler": "handler",
+ "kind": "serving"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "hugging-face-classifier-trainer",
+ "description": "Automatic train and optimize functions for HuggingFace framework",
+ "labels": {
+ "author": "davids"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "hugging_face_classifier_trainer.ipynb",
+ "mlrunVersion": "1.2.0",
+ "categories": [
+ "machine-learning",
+ "model-training"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/hugging_face_classifier_trainer/latest/",
+ "assets": {
+ "example": "src/hugging_face_classifier_trainer.ipynb",
+ "source": "src/hugging_face_classifier_trainer.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "hugging_face_classifier_trainer.py",
+ "image": "mlrun/ml-models",
+ "handler": "train",
+ "requirements": [
+ "onnx~=1.10.1",
+ "onnxruntime~=1.8.1",
+ "optimum~=1.6.4",
+ "transformers~=4.26.1",
+ "datasets~=2.10.1",
+ "scikit-learn~=1.0.2"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "hugging-face-classifier-trainer",
+ "description": "Automatic train and optimize functions for HuggingFace framework",
+ "labels": {
+ "author": "davids"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "hugging_face_classifier_trainer.ipynb",
+ "mlrunVersion": "1.2.0",
+ "categories": [
+ "machine-learning",
+ "model-training"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/hugging_face_classifier_trainer/0.0.1/",
+ "assets": {
+ "example": "src/hugging_face_classifier_trainer.ipynb",
+ "source": "src/hugging_face_classifier_trainer.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "hugging_face_classifier_trainer.py",
+ "image": "mlrun/ml-models",
+ "handler": "train",
+ "requirements": [
+ "onnx~=1.10.1",
+ "onnxruntime~=1.8.1",
+ "optimum~=1.6.4",
+ "transformers~=4.26.1",
+ "datasets~=2.10.1",
+ "scikit-learn~=1.0.2"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "hugging-face-classifier-trainer",
+ "description": "Automatic train and optimize functions for HuggingFace framework",
+ "labels": {
+ "author": "davids"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.1.0",
+ "tag": "0.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2022-08-28:17-25",
+ "example": "hugging_face_classifier_trainer.ipynb",
+ "mlrunVersion": "1.2.0",
+ "categories": [
+ "machine-learning",
+ "model-training"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/hugging_face_classifier_trainer/0.1.0/",
+ "assets": {
+ "example": "src/hugging_face_classifier_trainer.ipynb",
+ "source": "src/hugging_face_classifier_trainer.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "hugging_face_classifier_trainer.py",
+ "image": "mlrun/ml-models",
+ "handler": "train",
+ "requirements": [
+ "onnx~=1.10.1",
+ "onnxruntime~=1.8.1",
+ "optimum~=1.6.4",
+ "transformers~=4.26.1",
+ "datasets~=2.10.1",
+ "scikit-learn~=1.0.2"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "validate-great-expectations",
+ "description": "Validate a dataset using Great Expectations",
+ "labels": {
+ "author": "nicks",
+ "framework": "great-expectations"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.2",
+ "generationDate": "2022-04-26:12-28",
+ "example": "validate_great_expectations.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-validation",
+ "data-analysis"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/validate_great_expectations/latest/",
+ "assets": {
+ "example": "src/validate_great_expectations.ipynb",
+ "source": "src/validate_great_expectations.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "validate_great_expectations.py",
+ "image": "mlrun/mlrun",
+ "handler": "validate_expectations",
+ "requirements": [
+ "great-expectations==0.15.41"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "validate-great-expectations",
+ "description": "Validate a dataset using Great Expectations",
+ "labels": {
+ "author": "nicks",
+ "framework": "great-expectations"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.1.0",
+ "tag": "1.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.2",
+ "generationDate": "2022-04-26:12-28",
+ "example": "validate_great_expectations.ipynb",
+ "mlrunVersion": "1.1.0",
+ "categories": [
+ "data-validation",
+ "data-analysis"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/validate_great_expectations/1.1.0/",
+ "assets": {
+ "example": "src/validate_great_expectations.ipynb",
+ "source": "src/validate_great_expectations.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "validate_great_expectations.py",
+ "image": "mlrun/mlrun",
+ "handler": "validate_expectations",
+ "requirements": [
+ "great-expectations==0.15.41"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "question-answering",
+ "description": "GenAI approach of question answering on a given data",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.2.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2023-08-07:11-30",
+ "example": "question_answering.ipynb",
+ "mlrunVersion": "1.4.0",
+ "categories": [
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/question_answering/latest/",
+ "assets": {
+ "example": "src/question_answering.ipynb",
+ "source": "src/question_answering.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "question_answering.py",
+ "image": "mlrun/mlrun",
+ "handler": "answer_questions",
+ "requirements": "transformers torch tqdm",
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "question-answering",
+ "description": "GenAI approach of question answering on a given data",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.2.0",
+ "tag": "0.2.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2023-08-07:11-30",
+ "example": "question_answering.ipynb",
+ "mlrunVersion": "1.4.0",
+ "categories": [
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/question_answering/0.2.0/",
+ "assets": {
+ "example": "src/question_answering.ipynb",
+ "source": "src/question_answering.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "question_answering.py",
+ "image": "mlrun/mlrun",
+ "handler": "answer_questions",
+ "requirements": "transformers torch tqdm",
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "question-answering",
+ "description": "GenAI approach of question answering on a given data",
+ "labels": {
+ "author": "yonish"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.1.0",
+ "tag": "0.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2023-08-07:11-30",
+ "example": "question_answering.ipynb",
+ "mlrunVersion": "1.4.0",
+ "categories": [
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/question_answering/0.1.0/",
+ "assets": {
+ "example": "src/question_answering.ipynb",
+ "source": "src/question_answering.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "question_answering.py",
+ "image": "mlrun/mlrun",
+ "handler": "answer_questions",
+ "requirements": "transformers torch tqdm",
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "transcribe",
+ "description": "Transcribe audio files into text files",
+ "labels": {
+ "author": "yonatans"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.3",
+ "generationDate": "2023-07-13:11-20",
+ "example": "transcribe.ipynb",
+ "mlrunVersion": "1.4.0",
+ "categories": [
+ "data-preparation",
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/transcribe/latest/",
+ "assets": {
+ "example": "src/transcribe.ipynb",
+ "source": "src/transcribe.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "transcribe.py",
+ "image": "mlrun/mlrun",
+ "handler": "transcribe",
+ "requirements": [
+ "openai-whisper",
+ "tqdm"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "transcribe",
+ "description": "Transcribe audio files into text files",
+ "labels": {
+ "author": "yonatans"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.3",
+ "generationDate": "2023-07-13:11-20",
+ "example": "transcribe.ipynb",
+ "mlrunVersion": "1.4.0",
+ "categories": [
+ "data-preparation",
+ "machine-learning"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/transcribe/0.0.1/",
+ "assets": {
+ "example": "src/transcribe.ipynb",
+ "source": "src/transcribe.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "transcribe.py",
+ "image": "mlrun/mlrun",
+ "handler": "transcribe",
+ "requirements": [
+ "openai-whisper",
+ "tqdm"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "pii-recognizer",
+ "description": "This function is used to recognize PII in a directory of text files",
+ "labels": {
+ "author": "pgw"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.1.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.3",
+ "generationDate": "2023-08-15:10-24",
+ "example": "pii_recognizer.ipynb",
+ "mlrunVersion": "1.4.0",
+ "categories": [
+ "machine-learning",
+ "data-preparation"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/pii_recognizer/latest/",
+ "assets": {
+ "example": "src/pii_recognizer.ipynb",
+ "source": "src/pii_recognizer.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "pii_recognizer.py",
+ "image": "mlrun/mlrun",
+ "handler": "recognize_pii",
+ "requirements": [
+ "nltk",
+ "pandas",
+ "presidio-anonymizer",
+ "presidio-analyzer",
+ "torch",
+ "flair@git+https://github.com/flairNLP/flair.git@d4ed67bf663e4066517f00397412510d90043653",
+ "st-annotated-text",
+ "https://huggingface.co/beki/en_spacy_pii_distilbert/resolve/main/en_spacy_pii_distilbert-any-py3-none-any.whl"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "pii-recognizer",
+ "description": "This function is used to recognize PII in a directory of text files",
+ "labels": {
+ "author": "pgw"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.0.1",
+ "tag": "0.0.1",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.3",
+ "generationDate": "2023-08-15:10-24",
+ "example": "pii_recognizer.ipynb",
+ "mlrunVersion": "1.4.0",
+ "categories": [
+ "machine-learning",
+ "data-preparation"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/pii_recognizer/0.0.1/",
+ "assets": {
+ "example": "src/pii_recognizer.ipynb",
+ "source": "src/pii_recognizer.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "pii_recognizer.py",
+ "image": "mlrun/mlrun",
+ "handler": "recognize_pii",
+ "requirements": [
+ "nltk",
+ "pandas",
+ "presidio-anonymizer",
+ "presidio-analyzer",
+ "torch",
+ "flair@git+https://github.com/flairNLP/flair.git@d4ed67bf663e4066517f00397412510d90043653",
+ "st-annotated-text",
+ "https://huggingface.co/beki/en_spacy_pii_distilbert/resolve/main/en_spacy_pii_distilbert-any-py3-none-any.whl"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "pii-recognizer",
+ "description": "This function is used to recognize PII in a directory of text files",
+ "labels": {
+ "author": "pgw"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "0.1.0",
+ "tag": "0.1.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.3",
+ "generationDate": "2023-08-15:10-24",
+ "example": "pii_recognizer.ipynb",
+ "mlrunVersion": "1.4.0",
+ "categories": [
+ "machine-learning",
+ "data-preparation"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/pii_recognizer/0.1.0/",
+ "assets": {
+ "example": "src/pii_recognizer.ipynb",
+ "source": "src/pii_recognizer.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "pii_recognizer.py",
+ "image": "mlrun/mlrun",
+ "handler": "recognize_pii",
+ "requirements": [
+ "nltk",
+ "pandas",
+ "presidio-anonymizer",
+ "presidio-analyzer",
+ "torch",
+ "flair@git+https://github.com/flairNLP/flair.git@d4ed67bf663e4066517f00397412510d90043653",
+ "st-annotated-text",
+ "https://huggingface.co/beki/en_spacy_pii_distilbert/resolve/main/en_spacy_pii_distilbert-any-py3-none-any.whl"
+ ],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "huggingface-auto-trainer",
+ "description": "fine-tune llm model with ease",
+ "labels": {
+ "author": "Zeevr"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.0.0",
+ "tag": "latest",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2023-08-21:17-25",
+ "example": "huggingface_auto_trainer.ipynb",
+ "mlrunVersion": "1.4.0",
+ "categories": [
+ "machine-learning",
+ "model-training"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/huggingface_auto_trainer/latest/",
+ "assets": {
+ "example": "src/huggingface_auto_trainer.ipynb",
+ "source": "src/huggingface_auto_trainer.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "huggingface_auto_trainer.py",
+ "image": "mlrun/mlrun",
+ "handler": "finetune_llm",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ },
+ {
+ "kind": "HubItem",
+ "metadata": {
+ "name": "huggingface-auto-trainer",
+ "description": "fine-tune llm model with ease",
+ "labels": {
+ "author": "Zeevr"
+ },
+ "updated": null,
+ "created": null,
+ "source": "functions",
+ "version": "1.0.0",
+ "tag": "1.0.0",
+ "maintainers": [],
+ "icon": "",
+ "url": "",
+ "apiVersion": "v1",
+ "marketplaceType": "",
+ "platformVersion": "3.5.0",
+ "generationDate": "2023-08-21:17-25",
+ "example": "huggingface_auto_trainer.ipynb",
+ "mlrunVersion": "1.4.0",
+ "categories": [
+ "machine-learning",
+ "model-training"
+ ],
+ "hidden": false,
+ "doc": ""
+ },
+ "spec": {
+ "item_uri": "https://mlrun.github.io/marketplace/functions/master/huggingface_auto_trainer/1.0.0/",
+ "assets": {
+ "example": "src/huggingface_auto_trainer.ipynb",
+ "source": "src/huggingface_auto_trainer.py",
+ "function": "src/function.yaml",
+ "docs": "static/documentation.html"
+ },
+ "filename": "huggingface_auto_trainer.py",
+ "image": "mlrun/mlrun",
+ "handler": "finetune_llm",
+ "requirements": [],
+ "kind": "job"
+ },
+ "status": {
+ "state": null
+ }
+ }
+ ]
+}
\ No newline at end of file
diff --git a/tests/mockServer/data/mlrun/functions/batch_inference/batch_inference.yaml b/tests/mockServer/data/mlrun/functions/batch_inference/batch_inference.yaml
new file mode 100644
index 000000000..0850869df
--- /dev/null
+++ b/tests/mockServer/data/mlrun/functions/batch_inference/batch_inference.yaml
@@ -0,0 +1,133 @@
+# Copyright 2019 Iguazio
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+kind: job
+metadata:
+ name: batch-inference
+ tag: ''
+ hash: 7430b5c4fcdc47d7a00eadd27e85dff2e576c4e2
+ project: ''
+ labels:
+ author: guyl
+ categories:
+ - utils
+spec:
+ command: ''
+ args: []
+ image: mlrun/ml-models
+ build:
+ functionSourceCode: IyBDb3B5cmlnaHQgMjAxOSBJZ3VhemlvCiMKIyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsKIyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCiMgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CiMKIyAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiMKIyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCiMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBCQVNJUywKIyBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KIyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCiMgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCiMKaW1wb3J0IGhhc2hsaWIKaW1wb3J0IGpzb24KZnJvbSBkYXRldGltZSBpbXBvcnQgZGF0ZXRpbWUKZnJvbSB0eXBpbmcgaW1wb3J0IEFueSwgRGljdCwgTGlzdCwgVHVwbGUsIFVuaW9uCgppbXBvcnQgbWxydW4KaW1wb3J0IG1scnVuLmRhdGFzdG9yZQppbXBvcnQgbWxydW4udXRpbHMKaW1wb3J0IG51bXB5IGFzIG5wCmltcG9ydCBwYW5kYXMgYXMgcGQKZnJvbSBtbHJ1biBpbXBvcnQgZmVhdHVyZV9zdG9yZSBhcyBmcwpmcm9tIG1scnVuLmFydGlmYWN0cyBpbXBvcnQgQXJ0aWZhY3QKZnJvbSBtbHJ1bi5kYXRhX3R5cGVzLmluZmVyIGltcG9ydCBJbmZlck9wdGlvbnMsIGdldF9kZl9zdGF0cwpmcm9tIG1scnVuLmZyYW1ld29ya3MuYXV0b19tbHJ1biBpbXBvcnQgQXV0b01MUnVuCmZyb20gbWxydW4ubW9kZWxfbW9uaXRvcmluZy5mZWF0dXJlc19kcmlmdF90YWJsZSBpbXBvcnQgRmVhdHVyZXNEcmlmdFRhYmxlUGxvdApmcm9tIG1scnVuLm1vZGVsX21vbml0b3JpbmcubW9kZWxfbW9uaXRvcmluZ19iYXRjaCBpbXBvcnQgKAogICAgVmlydHVhbERyaWZ0LAogICAgY2FsY3VsYXRlX2lucHV0c19zdGF0aXN0aWNzLAopCgojIEEgdW5pb24gb2YgYWxsIHN1cHBvcnRlZCBkYXRhc2V0IHR5cGVzOgpEYXRhc2V0VHlwZSA9IFVuaW9uW21scnVuLkRhdGFJdGVtLCBsaXN0LCBkaWN0LCBwZC5EYXRhRnJhbWUsIHBkLlNlcmllcywgbnAubmRhcnJheV0KCgpkZWYgX3JlYWRfZGF0YXNldF9hc19kYXRhZnJhbWUoCiAgICBkYXRhc2V0OiBEYXRhc2V0VHlwZSwKICAgIGxhYmVsX2NvbHVtbnM6IFVuaW9uW3N0ciwgTGlzdFtzdHJdXSA9IE5vbmUsCiAgICBkcm9wX2NvbHVtbnM6IFVuaW9uW3N0ciwgTGlzdFtzdHJdLCBpbnQsIExpc3RbaW50XV0gPSBOb25lLAopIC0+IFR1cGxlW3BkLkRhdGFGcmFtZSwgTGlzdFtzdHJdXToKICAgICIiIgogICAgUGFyc2UgdGhlIGdpdmVuIGRhdGFzZXQgaW50byBhIERhdGFGcmFtZSBhbmQgZHJvcCB0aGUgY29sdW1ucyBhY2NvcmRpbmdseS4gSW4gYWRkaXRpb24sIHRoZSBsYWJlbCBjb2x1bW5zIHdpbGwgYmUKICAgIHBhcnNlZCBhbmQgdmFsaWRhdGVkIGFzIHdlbGwuCgogICAgOnBhcmFtIGRhdGFzZXQ6ICAgICAgIFRoZSBkYXRhc2V0IHRvIHRyYWluIHRoZSBtb2RlbCBvbi4KICAgICAgICAgICAgICAgICAgICAgICAgICBDYW4gYmUgZWl0aGVyIGEgbGlzdCBvZiBsaXN0cywgZGljdCwgVVJJIG9yIGEgRmVhdHVyZVZlY3Rvci4KICAgIDpwYXJhbSBsYWJlbF9jb2x1bW5zOiBUaGUgdGFyZ2V0IGxhYmVsKHMpIG9mIHRoZSBjb2x1bW4ocykgaW4gdGhlIGRhdGFzZXQuIGZvciBSZWdyZXNzaW9uIG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgQ2xhc3NpZmljYXRpb24gdGFza3MuCiAgICA6cGFyYW0gZHJvcF9jb2x1bW5zOiAgYGBzdHJgYCAvIGBgaW50YGAgb3IgYSBsaXN0IG9mIGBgc3RyYGAgLyBgYGludGBgIHRoYXQgcmVwcmVzZW50IHRoZSBjb2x1bW4gbmFtZXMgLyBpbmRpY2VzIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgZHJvcC4KCiAgICA6cmV0dXJuczogQSB0dXBsZSBvZjoKICAgICAgICAgICAgICBbMF0gPSBUaGUgcGFyc2VkIGRhdGFzZXQgYXMgYSBEYXRhRnJhbWUKICAgICAgICAgICAgICBbMV0gPSBMYWJlbCBjb2x1bW5zLgoKICAgIHJhaXNlcyBNTFJ1bkludmFsaWRBcmd1bWVudEVycm9yOiBJZiB0aGUgYGRyb3BfY29sdW1uc2AgYXJlIG5vdCBtYXRjaGluZyB0aGUgZGF0YXNldCBvciB1bnN1cHBvcnRlZCBkYXRhc2V0IHR5cGUuCiAgICAiIiIKICAgICMgVHVybiB0aGUgYGRyb3AgbGFiZWxzYCBpbnRvIGEgbGlzdCBpZiBnaXZlbjoKICAgIGlmIGRyb3BfY29sdW1ucyBpcyBub3QgTm9uZToKICAgICAgICBpZiBub3QgaXNpbnN0YW5jZShkcm9wX2NvbHVtbnMsIGxpc3QpOgogICAgICAgICAgICBkcm9wX2NvbHVtbnMgPSBbZHJvcF9jb2x1bW5zXQoKICAgICMgQ2hlY2sgaWYgdGhlIGRhdGFzZXQgaXMgaW4gZmFjdCBhIEZlYXR1cmUgVmVjdG9yOgogICAgc3RvcmVfdXJpX3ByZWZpeCwgXyA9IG1scnVuLmRhdGFzdG9yZS5wYXJzZV9zdG9yZV91cmkoZGF0YXNldC5hcnRpZmFjdF91cmwpCiAgICBpZiBtbHJ1bi51dGlscy5TdG9yZVByZWZpeC5GZWF0dXJlVmVjdG9yID09IHN0b3JlX3VyaV9wcmVmaXg6CiAgICAgICAgIyBUcnkgdG8gZ2V0IHRoZSBsYWJlbCBjb2x1bW5zIGlmIG5vdCBwcm92aWRlZDoKICAgICAgICBpZiBsYWJlbF9jb2x1bW5zIGlzIE5vbmU6CiAgICAgICAgICAgIGxhYmVsX2NvbHVtbnMgPSBkYXRhc2V0Lm1ldGEuc3RhdHVzLmxhYmVsX2NvbHVtbgogICAgICAgICMgR2V0IHRoZSBmZWF0dXJlcyBhbmQgcGFyc2UgdG8gRGF0YUZyYW1lOgogICAgICAgIGRhdGFzZXQgPSBmcy5nZXRfb2ZmbGluZV9mZWF0dXJlcygKICAgICAgICAgICAgZGF0YXNldC5tZXRhLnVyaSwgZHJvcF9jb2x1bW5zPWRyb3BfY29sdW1ucwogICAgICAgICkudG9fZGF0YWZyYW1lKCkKICAgIGVsc2U6CiAgICAgICAgIyBQYXJzZSB0byBEYXRhRnJhbWUgYWNjb3JkaW5nIHRvIHRoZSBkYXRhc2V0J3MgdHlwZToKICAgICAgICBpZiBpc2luc3RhbmNlKGRhdGFzZXQsIChsaXN0LCBucC5uZGFycmF5KSk6CiAgICAgICAgICAgICMgUGFyc2UgdGhlIGxpc3QgLyBudW1weSBhcnJheSBpbnRvIGEgRGF0YUZyYW1lOgogICAgICAgICAgICBkYXRhc2V0ID0gcGQuRGF0YUZyYW1lKGRhdGFzZXQpCiAgICAgICAgICAgICMgVmFsaWRhdGUgdGhlIGBkcm9wX2NvbHVtbnNgIGlzIGdpdmVuIGFzIGludGVnZXJzOgogICAgICAgICAgICBpZiBkcm9wX2NvbHVtbnMgYW5kIG5vdCBhbGwoaXNpbnN0YW5jZShjb2wsIGludCkgZm9yIGNvbCBpbiBkcm9wX2NvbHVtbnMpOgogICAgICAgICAgICAgICAgcmFpc2UgbWxydW4uZXJyb3JzLk1MUnVuSW52YWxpZEFyZ3VtZW50RXJyb3IoCiAgICAgICAgICAgICAgICAgICAgImBkcm9wX2NvbHVtbnNgIG11c3QgYmUgYW4gaW50ZWdlciAvIGxpc3Qgb2YgaW50ZWdlcnMgaWYgcHJvdmlkZWQgYXMgYSBsaXN0LiIKICAgICAgICAgICAgICAgICkKICAgICAgICBlbGlmIGlzaW5zdGFuY2UoZGF0YXNldCwgbWxydW4uRGF0YUl0ZW0pOgogICAgICAgICAgICAjIFR1cm4gdGhlIERhdGFJVGVtIHRvIERhdGFGcmFtZToKICAgICAgICAgICAgZGF0YXNldCA9IGRhdGFzZXQuYXNfZGYoKQogICAgICAgIGVsc2U6CiAgICAgICAgICAgICMgUGFyc2UgdGhlIG9iamVjdCAoc2hvdWxkIGJlIGEgcGQuRGF0YUZyYW1lIC8gcGQuU2VyaWVzLCBkaWN0aW9uYXJ5KSBpbnRvIGEgRGF0YUZyYW1lOgogICAgICAgICAgICB0cnk6CiAgICAgICAgICAgICAgICBkYXRhc2V0ID0gcGQuRGF0YUZyYW1lKGRhdGFzZXQpCiAgICAgICAgICAgIGV4Y2VwdCBWYWx1ZUVycm9yIGFzIGU6CiAgICAgICAgICAgICAgICByYWlzZSBtbHJ1bi5lcnJvcnMuTUxSdW5JbnZhbGlkQXJndW1lbnRFcnJvcigKICAgICAgICAgICAgICAgICAgICBmIkNvdWxkIG5vdCBwYXJzZSB0aGUgZ2l2ZW4gZGF0YXNldCBvZiB0eXBlIHt0eXBlKGRhdGFzZXQpfSBpbnRvIGEgcGFuZGFzIERhdGFGcmFtZS4gIgogICAgICAgICAgICAgICAgICAgIGYiUmVjZWl2ZWQgdGhlIGZvbGxvd2luZyBlcnJvcjoge2V9IgogICAgICAgICAgICAgICAgKQogICAgICAgICMgRHJvcCBjb2x1bW5zIGlmIG5lZWRlZDoKICAgICAgICBpZiBkcm9wX2NvbHVtbnM6CiAgICAgICAgICAgIGRhdGFzZXQuZHJvcChkcm9wX2NvbHVtbnMsIGF4aXM9MSwgaW5wbGFjZT1UcnVlKQoKICAgICMgVHVybiB0aGUgYGxhYmVsX2NvbHVtbnNgIGludG8gYSBsaXN0IGJ5IGRlZmF1bHQ6CiAgICBpZiBsYWJlbF9jb2x1bW5zIGlzIE5vbmU6CiAgICAgICAgbGFiZWxfY29sdW1ucyA9IFtdCiAgICBlbGlmIGlzaW5zdGFuY2UobGFiZWxfY29sdW1ucywgKHN0ciwgaW50KSk6CiAgICAgICAgbGFiZWxfY29sdW1ucyA9IFtsYWJlbF9jb2x1bW5zXQoKICAgIHJldHVybiBkYXRhc2V0LCBsYWJlbF9jb2x1bW5zCgoKZGVmIF9wcmVwYXJlX3Jlc3VsdF9zZXQoCiAgICB4OiBwZC5EYXRhRnJhbWUsIGxhYmVsX2NvbHVtbnM6IExpc3Rbc3RyXSwgeV9wcmVkOiBucC5uZGFycmF5CikgLT4gcGQuRGF0YUZyYW1lOgogICAgIiIiCiAgICBTZXQgZGVmYXVsdCBsYWJlbCBjb2x1bW4gbmFtZXMgYW5kIHZhbGlkYXRlIGdpdmVuIG5hbWVzIHRvIHByZXBhcmUgdGhlIHJlc3VsdCBzZXQgLSBhIGNvbmNhdGVuYXRpb24gb2YgdGhlIGlucHV0cwogICAgKHgpIGFuZCB0aGUgbW9kZWwgcHJlZGljdGlvbnMgKHlfcHJlZCkuCgogICAgOnBhcmFtIHg6ICAgICAgICAgICAgIFRoZSBpbnB1dHMuCiAgICA6cGFyYW0gbGFiZWxfY29sdW1uczogQSBsaXN0IG9mIHN0cmluZ3MgcmVwcmVzZW50aW5nIHRoZSB0YXJnZXQgY29sdW1uIG5hbWVzIHRvIGFkZCB0byB0aGUgcHJlZGljdGlvbnMuIERlZmF1bHQgbmFtZQogICAgICAgICAgICAgICAgICAgICAgICAgIHdpbGwgYmUgdXNlZCBpbiBjYXNlIHRoZSBsaXN0IGlzIGVtcHR5IChwcmVkaWN0ZWRfbGFiZWxfe2l9KS4KICAgIDpwYXJhbSB5X3ByZWQ6ICAgICAgICBUaGUgbW9kZWwgcHJlZGljdGlvbnMgb24gdGhlIGlucHV0cy4KCiAgICA6cmV0dXJuczogVGhlIHJlc3VsdCBzZXQuCgogICAgcmFpc2VzIE1MUnVuSW52YWxpZEFyZ3VtZW50RXJyb3I6IElmIHRoZSBsYWJlbHMgY29sdW1ucyBhbW91bnQgZG8gbm90IG1hdGNoIHRoZSBvdXRwdXRzIG9yIGlmIG9uZSBvZiB0aGUgbGFiZWwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sdW1uIGFscmVhZHkgZXhpc3RzIGluIHRoZSBkYXRhc2V0LgogICAgIiIiCiAgICAjIFByZXBhcmUgZGVmYXVsdCB0YXJnZXQgY29sdW1ucyBuYW1lcyBpZiBub3QgcHJvdmlkZWQ6CiAgICBwcmVkaWN0aW9uX2NvbHVtbnNfYW1vdW50ID0gMSBpZiBsZW4oeV9wcmVkLnNoYXBlKSA9PSAxIGVsc2UgeV9wcmVkLnNoYXBlWzFdCiAgICBpZiBsZW4obGFiZWxfY29sdW1ucykgPT0gMDoKICAgICAgICAjIEFkZCBkZWZhdWx0IGxhYmVsIGNvbHVtbiBuYW1lczoKICAgICAgICBpZiBwcmVkaWN0aW9uX2NvbHVtbnNfYW1vdW50ID09IDE6CiAgICAgICAgICAgIGxhYmVsX2NvbHVtbnMgPSBbInByZWRpY3RlZF9sYWJlbCJdCiAgICAgICAgZWxzZToKICAgICAgICAgICAgbGFiZWxfY29sdW1ucyA9IFsKICAgICAgICAgICAgICAgIGYicHJlZGljdGVkX2xhYmVsX3tpfSIgZm9yIGkgaW4gcmFuZ2UocHJlZGljdGlvbl9jb2x1bW5zX2Ftb3VudCkKICAgICAgICAgICAgXQoKICAgICMgVmFsaWRhdGUgdGhlIGxhYmVsIGNvbHVtbnM6CiAgICBpZiBwcmVkaWN0aW9uX2NvbHVtbnNfYW1vdW50ICE9IGxlbihsYWJlbF9jb2x1bW5zKToKICAgICAgICAjIE5vIGVxdWFsaXR5IGJldHdlZW4gcHJvdmlkZWQgbGFiZWwgY29sdW1uIG5hbWVzIGFuZCBvdXRwdXRzIGFtb3VudDoKICAgICAgICByYWlzZSBtbHJ1bi5lcnJvcnMuTUxSdW5JbnZhbGlkQXJndW1lbnRFcnJvcigKICAgICAgICAgICAgZiJUaGUgbnVtYmVyIG9mIHByZWRpY3RlZCBsYWJlbHM6IHtwcmVkaWN0aW9uX2NvbHVtbnNfYW1vdW50fSAiCiAgICAgICAgICAgIGYiaXMgbm90IGVxdWFsIHRvIHRoZSBnaXZlbiBsYWJlbCBjb2x1bW5zOiB7bGVuKGxhYmVsX2NvbHVtbnMpfSIKICAgICAgICApCiAgICBjb21tb25fbGFiZWxzID0gc2V0KGxhYmVsX2NvbHVtbnMpICYgc2V0KHguY29sdW1ucy50b2xpc3QoKSkKICAgIGlmIGNvbW1vbl9sYWJlbHM6CiAgICAgICAgIyBMYWJlbCBjb2x1bW4gZXhpc3QgaW4gdGhlIG9yaWdpbmFsIGlucHV0czoKICAgICAgICByYWlzZSBtbHJ1bi5lcnJvcnMuTUxSdW5JbnZhbGlkQXJndW1lbnRFcnJvcigKICAgICAgICAgICAgZiJUaGUgbGFiZWxzOiB7Y29tbW9uX2xhYmVsc30gYXJlIGFscmVhZHkgZXhpc3RlZCBpbiB0aGUgZ2l2ZW4gZGF0YXNldC4iCiAgICAgICAgKQoKICAgIHJldHVybiBwZC5jb25jYXQoCiAgICAgICAgW3gsIHBkLkRhdGFGcmFtZSh5X3ByZWQsIGNvbHVtbnM9bGFiZWxfY29sdW1ucywgaW5kZXg9eC5pbmRleCldLCBheGlzPTEKICAgICkKCgpkZWYgX2dldF9zYW1wbGVfc2V0X3N0YXRpc3RpY3MoCiAgICBzYW1wbGVfc2V0OiBEYXRhc2V0VHlwZSA9IE5vbmUsIG1vZGVsX2FydGlmYWN0X2ZlYXR1cmVfc3RhdHM6IGRpY3QgPSBOb25lCikgLT4gZGljdDoKICAgICIiIgogICAgR2V0IHRoZSBzYW1wbGUgc2V0IHN0YXRpc3RpY3MgZWl0aGVyIGZyb20gdGhlIGdpdmVuIHNhbXBsZSBzZXQgb3IgdGhlIHN0YXRpc3RpY3MgbG9nZ2VkIHdpdGggdGhlIG1vZGVsIHdoaWxlCiAgICBmYXZvcmluZyB0aGUgZ2l2ZW4gc2FtcGxlIHNldC4KCiAgICA6cGFyYW0gc2FtcGxlX3NldDogICAgICAgICAgICAgICAgICAgQSBzYW1wbGUgZGF0YXNldCB0byBnaXZlIHRvIGNvbXBhcmUgdGhlIGlucHV0cyBpbiB0aGUgZHJpZnQgYW5hbHlzaXMuCiAgICA6cGFyYW0gbW9kZWxfYXJ0aWZhY3RfZmVhdHVyZV9zdGF0czogVGhlIGBmZWF0dXJlX3N0YXRzYCBhdHRyaWJ1dGUgaW4gdGhlIHNwZWMgb2YgdGhlIG1vZGVsIGFydGlmYWN0LCB3aGVyZSB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcmlnaW5hbCBzYW1wbGUgc2V0IHN0YXRpc3RpY3Mgb2YgdGhlIG1vZGVsIHdhcyB1c2VkLgoKICAgIDpyZXR1cm5zOiBUaGUgc2FtcGxlIHNldCBzdGF0aXN0aWNzLgoKICAgIHJhaXNlcyBNTFJ1bkludmFsaWRBcmd1bWVudEVycm9yOiBJZiBubyBzYW1wbGUgc2V0IG9yIHN0YXRpc3RpY3Mgd2VyZSBnaXZlbi4KICAgICIiIgogICAgIyBDaGVjayBpZiBhIHNhbXBsZSBzZXQgd2FzIHByb3ZpZGVkOgogICAgaWYgc2FtcGxlX3NldCBpcyBOb25lOgogICAgICAgICMgQ2hlY2sgaWYgdGhlIG1vZGVsIHdhcyBsb2dnZWQgd2l0aCBhIHNhbXBsZSBzZXQ6CiAgICAgICAgaWYgbW9kZWxfYXJ0aWZhY3RfZmVhdHVyZV9zdGF0cyBpcyBOb25lOgogICAgICAgICAgICByYWlzZSBtbHJ1bi5lcnJvcnMuTUxSdW5JbnZhbGlkQXJndW1lbnRFcnJvcigKICAgICAgICAgICAgICAgICJDYW5ub3QgcGVyZm9ybSBkcmlmdCBhbmFseXNpcyBhcyB0aGVyZSBpcyBubyBzYW1wbGUgc2V0IHRvIGNvbXBhcmUgdG8uIFRoZSBtb2RlbCBhcnRpZmFjdCB3YXMgbm90ICIKICAgICAgICAgICAgICAgICJsb2dnZWQgd2l0aCBhIHNhbXBsZSBzZXQgYW5kIGBzYW1wbGVfc2V0YCB3YXMgbm90IHByb3ZpZGVkIHRvIHRoZSBmdW5jdGlvbi4iCiAgICAgICAgICAgICkKICAgICAgICAjIFJldHVybiB0aGUgc3RhdGlzdGljcyBsb2dnZWQgd2l0aCB0aGUgbW9kZWw6CiAgICAgICAgcmV0dXJuIG1vZGVsX2FydGlmYWN0X2ZlYXR1cmVfc3RhdHMKCiAgICAjIFR1cm4gdGhlIERhdGFJdGVtIHRvIERhdGFGcmFtZToKICAgIGlmIGlzaW5zdGFuY2Uoc2FtcGxlX3NldCwgbWxydW4uRGF0YUl0ZW0pOgogICAgICAgIHNhbXBsZV9zZXQsIF8gPSBfcmVhZF9kYXRhc2V0X2FzX2RhdGFmcmFtZShkYXRhc2V0PXNhbXBsZV9zZXQpCgogICAgIyBSZXR1cm4gdGhlIHNhbXBsZSBzZXQgc3RhdGlzdGljczoKICAgIHJldHVybiBnZXRfZGZfc3RhdHMoZGY9c2FtcGxlX3NldCwgb3B0aW9ucz1JbmZlck9wdGlvbnMuSGlzdG9ncmFtKQoKCmRlZiBfZ2V0X2RyaWZ0X3Jlc3VsdCgKICAgIHR2ZDogZmxvYXQsCiAgICBoZWxsaW5nZXI6IGZsb2F0LAogICAgdGhyZXNob2xkOiBmbG9hdCwKKSAtPiBUdXBsZVtib29sLCBmbG9hdF06CiAgICAiIiIKICAgIENhbGN1bGF0ZSB0aGUgZHJpZnQgcmVzdWx0IGJ5IHRoZSBmb2xsb3dpbmcgZXF1YXRpb246ICh0dmQgKyBoZWxsaW5nZXIpIC8gMgoKICAgIDpwYXJhbSB0dmQ6ICAgICAgIFRoZSBmZWF0dXJlJ3MgVFZEIHZhbHVlLgogICAgOnBhcmFtIGhlbGxpbmdlcjogVGhlIGZlYXR1cmUncyBIZWxsaW5nZXIgdmFsdWUuCiAgICA6cGFyYW0gdGhyZXNob2xkOiBUaGUgdGhyZXNob2xkIGZyb20gd2hpY2ggdGhlIHZhbHVlIGlzIGNvbnNpZGVyZWQgYSBkcmlmdC4KCiAgICA6cmV0dXJuczogQSB0dXBsZSBvZjoKICAgICAgICAgICAgICBbMF0gPSBCb29sZWFuIHZhbHVlIGFzIHRoZSBkcmlmdCBzdGF0dXMuCiAgICAgICAgICAgICAgWzFdID0gVGhlIHJlc3VsdC4KICAgICIiIgogICAgcmVzdWx0ID0gKHR2ZCArIGhlbGxpbmdlcikgLyAyCiAgICBpZiByZXN1bHQgPj0gdGhyZXNob2xkOgogICAgICAgIHJldHVybiBUcnVlLCByZXN1bHQKICAgIHJldHVybiBGYWxzZSwgcmVzdWx0CgoKZGVmIF9wZXJmb3JtX2RyaWZ0X2FuYWx5c2lzKAogICAgc2FtcGxlX3NldF9zdGF0aXN0aWNzOiBkaWN0LAogICAgaW5wdXRzOiBwZC5EYXRhRnJhbWUsCiAgICBkcmlmdF90aHJlc2hvbGQ6IGZsb2F0LAogICAgcG9zc2libGVfZHJpZnRfdGhyZXNob2xkOiBmbG9hdCwKICAgIGluZl9jYXBwaW5nOiBmbG9hdCwKKSAtPiBUdXBsZVtBcnRpZmFjdCwgQXJ0aWZhY3QsIGRpY3RdOgogICAgIiIiCiAgICBQZXJmb3JtIGRyaWZ0IGFuYWx5c2lzLCBwcm9kdWNpbmcgdGhlIGRyaWZ0IHRhYmxlIGFydGlmYWN0IGZvciBsb2dnaW5nIHBvc3QgcHJlZGljdGlvbi4KCiAgICA6cGFyYW0gc2FtcGxlX3NldF9zdGF0aXN0aWNzOiAgICBUaGUgc3RhdGlzdGljcyBvZiB0aGUgc2FtcGxlIHNldCBsb2dnZWQgYWxvbmcgYSBtb2RlbC4KICAgIDpwYXJhbSBpbnB1dHM6ICAgICAgICAgICAgICAgICAgIElucHV0IGRhdGFzZXQgdG8gcGVyZm9ybSB0aGUgZHJpZnQgY2FsY3VsYXRpb24gb24uCiAgICA6cGFyYW0gZHJpZnRfdGhyZXNob2xkOiAgICAgICAgICBUaGUgdGhyZXNob2xkIG9mIHdoaWNoIHRvIG1hcmsgZHJpZnRzLgogICAgOnBhcmFtIHBvc3NpYmxlX2RyaWZ0X3RocmVzaG9sZDogVGhlIHRocmVzaG9sZCBvZiB3aGljaCB0byBtYXJrIHBvc3NpYmxlIGRyaWZ0cy4KICAgIDpwYXJhbSBpbmZfY2FwcGluZzogICAgICAgICAgICAgIFRoZSB2YWx1ZSB0byBzZXQgZm9yIHdoZW4gaXQgcmVhY2hlZCBpbmZpbml0eS4KCiAgICA6cmV0dXJuczogQSB0dXBsZSBvZgogICAgICAgICAgICAgIFswXSA9IEFuIE1MUnVuIGFydGlmYWN0IGhvbGRpbmcgdGhlIEhUTUwgY29kZSBvZiB0aGUgZHJpZnQgdGFibGUgcGxvdC4KICAgICAgICAgICAgICBbMV0gPSBBbiBNTFJ1biBhcnRpZmFjdCBob2xkaW5nIHRoZSBtZXRyaWMgcGVyIGZlYXR1cmUgZGljdGlvbmFyeS4KICAgICAgICAgICAgICBbMl0gPSBSZXN1bHRzIHRvIGxvZyB0aGUgZmluYWwgYW5hbHlzaXMgb3V0Y29tZS4KICAgICIiIgogICAgIyBDYWxjdWxhdGUgdGhlIGlucHV0J3Mgc3RhdGlzdGljczoKICAgIGlucHV0c19zdGF0aXN0aWNzID0gY2FsY3VsYXRlX2lucHV0c19zdGF0aXN0aWNzKAogICAgICAgIHNhbXBsZV9zZXRfc3RhdGlzdGljcz1zYW1wbGVfc2V0X3N0YXRpc3RpY3MsCiAgICAgICAgaW5wdXRzPWlucHV0cywKICAgICkKCiAgICAjIENhbGN1bGF0ZSBkcmlmdDoKICAgIHZpcnR1YWxfZHJpZnQgPSBWaXJ0dWFsRHJpZnQoaW5mX2NhcHBpbmc9aW5mX2NhcHBpbmcpCiAgICBtZXRyaWNzID0gdmlydHVhbF9kcmlmdC5jb21wdXRlX2RyaWZ0X2Zyb21faGlzdG9ncmFtcygKICAgICAgICBmZWF0dXJlX3N0YXRzPXNhbXBsZV9zZXRfc3RhdGlzdGljcywKICAgICAgICBjdXJyZW50X3N0YXRzPWlucHV0c19zdGF0aXN0aWNzLAogICAgKQogICAgZHJpZnRfcmVzdWx0cyA9IHZpcnR1YWxfZHJpZnQuY2hlY2tfZm9yX2RyaWZ0X3Blcl9mZWF0dXJlKAogICAgICAgIG1ldHJpY3NfcmVzdWx0c19kaWN0aW9uYXJ5PW1ldHJpY3MsCiAgICAgICAgcG9zc2libGVfZHJpZnRfdGhyZXNob2xkPXBvc3NpYmxlX2RyaWZ0X3RocmVzaG9sZCwKICAgICAgICBkcmlmdF9kZXRlY3RlZF90aHJlc2hvbGQ9ZHJpZnRfdGhyZXNob2xkLAogICAgKQoKICAgICMgVmFsaWRhdGUgYWxsIGZlYXR1cmUgY29sdW1ucyBuYW1lZCB0aGUgc2FtZSBiZXR3ZWVuIHRoZSBpbnB1dHMgYW5kIHNhbXBsZSBzZXRzOgogICAgc2FtcGxlX2ZlYXR1cmVzID0gc2V0KAogICAgICAgIFsKICAgICAgICAgICAgZmVhdHVyZV9uYW1lCiAgICAgICAgICAgIGZvciBmZWF0dXJlX25hbWUsIGZlYXR1cmVfc3RhdGlzdGljcyBpbiBzYW1wbGVfc2V0X3N0YXRpc3RpY3MuaXRlbXMoKQogICAgICAgICAgICBpZiBpc2luc3RhbmNlKGZlYXR1cmVfc3RhdGlzdGljcywgZGljdCkKICAgICAgICBdCiAgICApCiAgICBpbnB1dF9mZWF0dXJlcyA9IHNldChpbnB1dHMuY29sdW1ucykKICAgIGlmIGxlbihzYW1wbGVfZmVhdHVyZXMgJiBpbnB1dF9mZWF0dXJlcykgIT0gbGVuKGlucHV0X2ZlYXR1cmVzKToKICAgICAgICByYWlzZSBtbHJ1bi5lcnJvcnMuTUxSdW5JbnZhbGlkQXJndW1lbnRFcnJvcigKICAgICAgICAgICAgZiJOb3QgYWxsIGZlYXR1cmUgbmFtZXMgd2VyZSBtYXRjaGluZyBiZXR3ZWVuIHRoZSBpbnB1dHMgYW5kIHRoZSBzYW1wbGUgc2V0IHByb3ZpZGVkOiAiCiAgICAgICAgICAgIGYie2lucHV0X2ZlYXR1cmVzIC0gc2FtcGxlX2ZlYXR1cmVzIHwgc2FtcGxlX2ZlYXR1cmVzIC0gaW5wdXRfZmVhdHVyZXN9IgogICAgICAgICkKCiAgICAjIFBsb3Q6CiAgICBodG1sX3Bsb3QgPSBGZWF0dXJlc0RyaWZ0VGFibGVQbG90KCkucHJvZHVjZSgKICAgICAgICBmZWF0dXJlcz1saXN0KGlucHV0X2ZlYXR1cmVzKSwKICAgICAgICBzYW1wbGVfc2V0X3N0YXRpc3RpY3M9c2FtcGxlX3NldF9zdGF0aXN0aWNzLAogICAgICAgIGlucHV0c19zdGF0aXN0aWNzPWlucHV0c19zdGF0aXN0aWNzLAogICAgICAgIG1ldHJpY3M9bWV0cmljcywKICAgICAgICBkcmlmdF9yZXN1bHRzPWRyaWZ0X3Jlc3VsdHMsCiAgICApCgogICAgIyBQcmVwYXJlIG1ldHJpY3MgcGVyIGZlYXR1cmUgZGljdGlvbmFyeToKICAgIG1ldHJpY3NfcGVyX2ZlYXR1cmUgPSB7CiAgICAgICAgZmVhdHVyZTogX2dldF9kcmlmdF9yZXN1bHQoCiAgICAgICAgICAgIHR2ZD1tZXRyaWNfZGljdGlvbmFyeVsidHZkIl0sCiAgICAgICAgICAgIGhlbGxpbmdlcj1tZXRyaWNfZGljdGlvbmFyeVsiaGVsbGluZ2VyIl0sCiAgICAgICAgICAgIHRocmVzaG9sZD1kcmlmdF90aHJlc2hvbGQsCiAgICAgICAgKVsxXQogICAgICAgIGZvciBmZWF0dXJlLCBtZXRyaWNfZGljdGlvbmFyeSBpbiBtZXRyaWNzLml0ZW1zKCkKICAgICAgICBpZiBpc2luc3RhbmNlKG1ldHJpY19kaWN0aW9uYXJ5LCBkaWN0KQogICAgfQoKICAgICMgQ2FsY3VsYXRlIHRoZSBmaW5hbCBhbmFseXNpcyByZXN1bHQ6CiAgICBkcmlmdF9zdGF0dXMsIGRyaWZ0X21ldHJpYyA9IF9nZXRfZHJpZnRfcmVzdWx0KAogICAgICAgIHR2ZD1tZXRyaWNzWyJ0dmRfbWVhbiJdLAogICAgICAgIGhlbGxpbmdlcj1tZXRyaWNzWyJoZWxsaW5nZXJfbWVhbiJdLAogICAgICAgIHRocmVzaG9sZD1kcmlmdF90aHJlc2hvbGQsCiAgICApCgogICAgcmV0dXJuICgKICAgICAgICBBcnRpZmFjdChib2R5PWh0bWxfcGxvdCwgZm9ybWF0PSJodG1sIiwga2V5PSJkcmlmdF90YWJsZV9wbG90IiksCiAgICAgICAgQXJ0aWZhY3QoCiAgICAgICAgICAgIGJvZHk9anNvbi5kdW1wcyhtZXRyaWNzX3Blcl9mZWF0dXJlKSwKICAgICAgICAgICAgZm9ybWF0PSJqc29uIiwKICAgICAgICAgICAga2V5PSJmZWF0dXJlc19kcmlmdF9yZXN1bHRzIiwKICAgICAgICApLAogICAgICAgIHsiZHJpZnRfc3RhdHVzIjogZHJpZnRfc3RhdHVzLCAiZHJpZnRfbWV0cmljIjogZHJpZnRfbWV0cmljfSwKICAgICkKCgpkZWYgaW5mZXIoCiAgICBjb250ZXh0OiBtbHJ1bi5NTENsaWVudEN0eCwKICAgIG1vZGVsOiBzdHIsCiAgICBkYXRhc2V0OiBEYXRhc2V0VHlwZSwKICAgIGRyb3BfY29sdW1uczogVW5pb25bc3RyLCBMaXN0W3N0cl0sIGludCwgTGlzdFtpbnRdXSA9IE5vbmUsCiAgICBsYWJlbF9jb2x1bW5zOiBVbmlvbltzdHIsIExpc3Rbc3RyXV0gPSBOb25lLAogICAgbG9nX3Jlc3VsdF9zZXQ6IGJvb2wgPSBUcnVlLAogICAgcmVzdWx0X3NldF9uYW1lOiBzdHIgPSAicHJlZGljdGlvbiIsCiAgICBiYXRjaF9pZDogc3RyID0gTm9uZSwKICAgIHBlcmZvcm1fZHJpZnRfYW5hbHlzaXM6IGJvb2wgPSBOb25lLAogICAgc2FtcGxlX3NldDogRGF0YXNldFR5cGUgPSBOb25lLAogICAgZHJpZnRfdGhyZXNob2xkOiBmbG9hdCA9IDAuNywKICAgIHBvc3NpYmxlX2RyaWZ0X3RocmVzaG9sZDogZmxvYXQgPSAwLjUsCiAgICBpbmZfY2FwcGluZzogZmxvYXQgPSAxMC4wLAogICAgYXJ0aWZhY3RzX3RhZzogc3RyID0gIiIsCiAgICAqKnByZWRpY3Rfa3dhcmdzOiBEaWN0W3N0ciwgQW55XSwKKToKICAgICIiIgogICAgUGVyZm9ybSBhIHByZWRpY3Rpb24gb24gYSBnaXZlbiBkYXRhc2V0IHdpdGggdGhlIGdpdmVuIG1vZGVsLiBDYW4gcGVyZm9ybSBkcmlmdCBhbmFseXNpcyBiZXR3ZWVuIHRoZSBzYW1wbGUgc2V0CiAgICBzdGF0aXN0aWNzIHN0b3JlZCBpbiB0aGUgbW9kZWwgdG8gdGhlIGN1cnJlbnQgaW5wdXQgZGF0YS4gVGhlIGRyaWZ0IHJ1bGUgaXMgdGhlIHZhbHVlIHBlci1mZWF0dXJlIG1lYW4gb2YgdGhlIFRWRAogICAgYW5kIEhlbGxpbmdlciBzY29yZXMgYWNjb3JkaW5nIHRvIHRoZSB0aHJlc2hvbGRzIGNvbmZpZ3VyZXMgaGVyZS4KCiAgICA6cGFyYW0gY29udGV4dDogICAgICAgICAgICAgICAgICBNTFJ1biBjb250ZXh0LgogICAgOnBhcmFtIG1vZGVsOiAgICAgICAgICAgICAgICAgICAgVGhlIG1vZGVsIFN0b3JlIHBhdGguCiAgICA6cGFyYW0gZGF0YXNldDogICAgICAgICAgICAgICAgICBUaGUgZGF0YXNldCB0byBpbmZlciB0aHJvdWdoIHRoZSBtb2RlbC4gQ2FuIGJlIHBhc3NlZCBpbiBgaW5wdXRzYCBhcyBlaXRoZXIgYQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YXNldCBhcnRpZmFjdCAvIEZlYXR1cmUgdmVjdG9yIFVSSS4gT3IsIGluIGBwYXJhbWV0ZXJzYCBhcyBhIGxpc3QsIGRpY3Rpb25hcnkgb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bXB5IGFycmF5LgogICAgOnBhcmFtIGRyb3BfY29sdW1uczogICAgICAgICAgICAgQSBzdHJpbmcgLyBpbnRlZ2VyIG9yIGEgbGlzdCBvZiBzdHJpbmdzIC8gaW50ZWdlcnMgdGhhdCByZXByZXNlbnQgdGhlIGNvbHVtbiBuYW1lcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBpbmRpY2VzIHRvIGRyb3AuIFdoZW4gdGhlIGRhdGFzZXQgaXMgYSBsaXN0IG9yIGEgbnVtcHkgYXJyYXkgdGhpcyBwYXJhbWV0ZXIgbXVzdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmUgcmVwcmVzZW50ZWQgYnkgaW50ZWdlcnMuCiAgICA6cGFyYW0gbGFiZWxfY29sdW1uczogICAgICAgICAgICBUaGUgdGFyZ2V0IGxhYmVsKHMpIG9mIHRoZSBjb2x1bW4ocykgaW4gdGhlIGRhdGFzZXQgZm9yIFJlZ3Jlc3Npb24gb3IKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENsYXNzaWZpY2F0aW9uIHRhc2tzLiBUaGUgbGFiZWwgY29sdW1uIGNhbiBiZSBhY2Nlc3NlZCBmcm9tIHRoZSBtb2RlbCBvYmplY3QsIG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgZmVhdHVyZSB2ZWN0b3IgcHJvdmlkZWQgaWYgYXZhaWxhYmxlLgogICAgOnBhcmFtIGxvZ19yZXN1bHRfc2V0OiAgICAgICAgICAgV2hldGhlciB0byBsb2cgdGhlIHJlc3VsdCBzZXQgLSBhIERhdGFGcmFtZSBvZiB0aGUgZ2l2ZW4gaW5wdXRzIGNvbmNhdGVuYXRlZCB3aXRoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcHJlZGljdGlvbnMuIERlZmF1bHRlZCB0byBUcnVlLgogICAgOnBhcmFtIHJlc3VsdF9zZXRfbmFtZTogICAgICAgICAgVGhlIGRiIGtleSB0byBzZXQgbmFtZSBvZiB0aGUgcHJlZGljdGlvbiByZXN1bHQgYW5kIHRoZSBmaWxlbmFtZS4gRGVmYXVsdGVkIHRvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAncHJlZGljdGlvbicuCiAgICA6cGFyYW0gYmF0Y2hfaWQ6ICAgICAgICAgICAgICAgICBUaGUgSUQgb2YgdGhlIGdpdmVuIGJhdGNoIChpbmZlcmVuY2UgZGF0YXNldCkuIElmIGBOb25lYCwgaXQgd2lsbCBiZSBnZW5lcmF0ZWQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBXaWxsIGJlIGxvZ2dlZCBhcyBhIHJlc3VsdCBvZiB0aGUgcnVuLgogICAgOnBhcmFtIHBlcmZvcm1fZHJpZnRfYW5hbHlzaXM6ICAgV2hldGhlciB0byBwZXJmb3JtIGRyaWZ0IGFuYWx5c2lzIGJldHdlZW4gdGhlIHNhbXBsZSBzZXQgb2YgdGhlIG1vZGVsIG9iamVjdCB0byB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFzZXQgZ2l2ZW4uIEJ5IGRlZmF1bHQsIE5vbmUsIHdoaWNoIG1lYW5zIGl0IHdpbGwgcGVyZm9ybSBkcmlmdCBhbmFseXNpcyBpZiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsIGhhcyBhIHNhbXBsZSBzZXQgc3RhdGlzdGljcy4gUGVyZm9ybSBkcmlmdCBhbmFseXNpcyB3aWxsIHByb2R1Y2UgYSBkYXRhIGRyaWZ0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YWJsZSBhcnRpZmFjdC4KICAgIDpwYXJhbSBzYW1wbGVfc2V0OiAgICAgICAgICAgICAgIEEgc2FtcGxlIGRhdGFzZXQgdG8gZ2l2ZSB0byBjb21wYXJlIHRoZSBpbnB1dHMgaW4gdGhlIGRyaWZ0IGFuYWx5c2lzLiBUaGUgZGVmYXVsdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hvc2VuIHNhbXBsZSBzZXQgd2lsbCBhbHdheXMgYmUgdGhlIG9uZSB3aG8gaXMgc2V0IGluIHRoZSBtb2RlbCBhcnRpZmFjdCBpdHNlbGYuCiAgICA6cGFyYW0gZHJpZnRfdGhyZXNob2xkOiAgICAgICAgICBUaGUgdGhyZXNob2xkIG9mIHdoaWNoIHRvIG1hcmsgZHJpZnRzLiBEZWZhdWx0ZWQgdG8gMC43LgogICAgOnBhcmFtIHBvc3NpYmxlX2RyaWZ0X3RocmVzaG9sZDogVGhlIHRocmVzaG9sZCBvZiB3aGljaCB0byBtYXJrIHBvc3NpYmxlIGRyaWZ0cy4gRGVmYXVsdGVkIHRvIDAuNS4KICAgIDpwYXJhbSBpbmZfY2FwcGluZzogICAgICAgICAgICAgIFRoZSB2YWx1ZSB0byBzZXQgZm9yIHdoZW4gaXQgcmVhY2hlZCBpbmZpbml0eS4gRGVmYXVsdGVkIHRvIDEwLjAuCiAgICA6cGFyYW0gYXJ0aWZhY3RzX3RhZzogICAgICAgICAgICBUYWcgdG8gdXNlIGZvciBhbGwgdGhlIGFydGlmYWN0cyByZXN1bHRlZCBmcm9tIHRoZSBmdW5jdGlvbi4KICAgICIiIgogICAgIyBMb2FkaW5nIHRoZSBtb2RlbDoKICAgIGNvbnRleHQubG9nZ2VyLmluZm8oZiJMb2FkaW5nIG1vZGVsLi4uIikKICAgIG1vZGVsX2hhbmRsZXIgPSBBdXRvTUxSdW4ubG9hZF9tb2RlbChtb2RlbF9wYXRoPW1vZGVsLCBjb250ZXh0PWNvbnRleHQpCiAgICBpZiBsYWJlbF9jb2x1bW5zIGlzIE5vbmU6CiAgICAgICAgbGFiZWxfY29sdW1ucyA9IFsKICAgICAgICAgICAgb3V0cHV0Lm5hbWUgZm9yIG91dHB1dCBpbiBtb2RlbF9oYW5kbGVyLl9tb2RlbF9hcnRpZmFjdC5zcGVjLm91dHB1dHMKICAgICAgICBdCgogICAgIyBHZXQgZGF0YXNldCBieSBvYmplY3QsIFVSTCBvciBieSBGZWF0dXJlVmVjdG9yOgogICAgY29udGV4dC5sb2dnZXIuaW5mbyhmIkxvYWRpbmcgZGF0YS4uLiIpCiAgICB4LCBsYWJlbF9jb2x1bW5zID0gX3JlYWRfZGF0YXNldF9hc19kYXRhZnJhbWUoCiAgICAgICAgZGF0YXNldD1kYXRhc2V0LAogICAgICAgIGxhYmVsX2NvbHVtbnM9bGFiZWxfY29sdW1ucywKICAgICAgICBkcm9wX2NvbHVtbnM9ZHJvcF9jb2x1bW5zLAogICAgKQoKICAgICMgUHJlZGljdDoKICAgIGNvbnRleHQubG9nZ2VyLmluZm8oZiJDYWxjdWxhdGluZyBwcmVkaWN0aW9uLi4uIikKICAgIHlfcHJlZCA9IG1vZGVsX2hhbmRsZXIubW9kZWwucHJlZGljdCh4LCAqKnByZWRpY3Rfa3dhcmdzKQoKICAgICMgUHJlcGFyZSB0aGUgcmVzdWx0IHNldDoKICAgIHJlc3VsdF9zZXQgPSBfcHJlcGFyZV9yZXN1bHRfc2V0KHg9eCwgbGFiZWxfY29sdW1ucz1sYWJlbF9jb2x1bW5zLCB5X3ByZWQ9eV9wcmVkKQoKICAgICMgQ2hlY2sgZm9yIGxvZ2dpbmcgdGhlIHJlc3VsdCBzZXQ6CiAgICBpZiBsb2dfcmVzdWx0X3NldDoKICAgICAgICAjIExvZyB0aGUgcmVzdWx0IHNldDoKICAgICAgICBjb250ZXh0LmxvZ2dlci5pbmZvKGYiTG9nZ2luZyByZXN1bHQgc2V0ICh4IHwgcHJlZGljdGlvbikuLi4iKQogICAgICAgIGNvbnRleHQubG9nX2RhdGFzZXQoCiAgICAgICAgICAgIGtleT1yZXN1bHRfc2V0X25hbWUsCiAgICAgICAgICAgIGRmPXJlc3VsdF9zZXQsCiAgICAgICAgICAgIGRiX2tleT1yZXN1bHRfc2V0X25hbWUsCiAgICAgICAgICAgIHRhZz1hcnRpZmFjdHNfdGFnLAogICAgICAgICkKICAgICAgICAjIExvZyB0aGUgYmF0Y2ggSUQ6CiAgICAgICAgaWYgYmF0Y2hfaWQgaXMgTm9uZToKICAgICAgICAgICAgYmF0Y2hfaWQgPSBoYXNobGliLnNoYTIyNChzdHIoZGF0ZXRpbWUubm93KCkpLmVuY29kZSgpKS5oZXhkaWdlc3QoKQogICAgICAgIGNvbnRleHQubG9nX3Jlc3VsdCgKICAgICAgICAgICAga2V5PSJiYXRjaF9pZCIsCiAgICAgICAgICAgIHZhbHVlPWJhdGNoX2lkLAogICAgICAgICkKCiAgICAjIENoZWNrIGZvciBwZXJmb3JtaW5nIGRyaWZ0IGFuYWx5c2lzOgogICAgaWYgKAogICAgICAgIHBlcmZvcm1fZHJpZnRfYW5hbHlzaXMgaXMgTm9uZQogICAgICAgIGFuZCBtb2RlbF9oYW5kbGVyLl9tb2RlbF9hcnRpZmFjdC5zcGVjLmZlYXR1cmVfc3RhdHMgaXMgbm90IE5vbmUKICAgICk6CiAgICAgICAgcGVyZm9ybV9kcmlmdF9hbmFseXNpcyA9IFRydWUKICAgIGlmIHBlcmZvcm1fZHJpZnRfYW5hbHlzaXM6CiAgICAgICAgY29udGV4dC5sb2dnZXIuaW5mbygiUGVyZm9ybWluZyBkcmlmdCBhbmFseXNpcy4uLiIpCiAgICAgICAgIyBHZXQgdGhlIHNhbXBsZSBzZXQgc3RhdGlzdGljcyAoZWl0aGVyIGZyb20gdGhlIHNhbXBsZSBzZXQgb3IgZnJvbSB0aGUgc3RhdGlzdGljcyBsb2dnZWQgd2l0aCB0aGUgbW9kZWwpOgogICAgICAgIHNhbXBsZV9zZXRfc3RhdGlzdGljcyA9IF9nZXRfc2FtcGxlX3NldF9zdGF0aXN0aWNzKAogICAgICAgICAgICBzYW1wbGVfc2V0PXNhbXBsZV9zZXQsCiAgICAgICAgICAgIG1vZGVsX2FydGlmYWN0X2ZlYXR1cmVfc3RhdHM9bW9kZWxfaGFuZGxlci5fbW9kZWxfYXJ0aWZhY3Quc3BlYy5mZWF0dXJlX3N0YXRzLAogICAgICAgICkKICAgICAgICAjIFByb2R1Y2UgdGhlIGFydGlmYWN0OgogICAgICAgICgKICAgICAgICAgICAgZHJpZnRfdGFibGVfcGxvdCwKICAgICAgICAgICAgbWV0cmljX3Blcl9mZWF0dXJlX2RpY3QsCiAgICAgICAgICAgIGFuYWx5c2lzX3Jlc3VsdHMsCiAgICAgICAgKSA9IF9wZXJmb3JtX2RyaWZ0X2FuYWx5c2lzKAogICAgICAgICAgICBzYW1wbGVfc2V0X3N0YXRpc3RpY3M9c2FtcGxlX3NldF9zdGF0aXN0aWNzLAogICAgICAgICAgICBpbnB1dHM9cmVzdWx0X3NldCwKICAgICAgICAgICAgZHJpZnRfdGhyZXNob2xkPWRyaWZ0X3RocmVzaG9sZCwKICAgICAgICAgICAgcG9zc2libGVfZHJpZnRfdGhyZXNob2xkPXBvc3NpYmxlX2RyaWZ0X3RocmVzaG9sZCwKICAgICAgICAgICAgaW5mX2NhcHBpbmc9aW5mX2NhcHBpbmcsCiAgICAgICAgKQogICAgICAgICMgTG9nIHRoZSBhcnRpZmFjdCBhbmQgcmVzdWx0czoKICAgICAgICBjb250ZXh0LmxvZ19hcnRpZmFjdChkcmlmdF90YWJsZV9wbG90LCB0YWc9YXJ0aWZhY3RzX3RhZykKICAgICAgICBjb250ZXh0LmxvZ19hcnRpZmFjdChtZXRyaWNfcGVyX2ZlYXR1cmVfZGljdCwgdGFnPWFydGlmYWN0c190YWcpCiAgICAgICAgY29udGV4dC5sb2dfcmVzdWx0cyhyZXN1bHRzPWFuYWx5c2lzX3Jlc3VsdHMpCg==
+ commands: []
+ code_origin: https://github.com/mlrun/functions.git#b1cc7349a25f92f50243bc93bf1c44b75e8f2415:/Users/Eyal_Danieli/PycharmProjects/functions/batch_inference/batch_inference.py
+ origin_filename: /Users/Eyal_Danieli/PycharmProjects/functions/batch_inference/batch_inference.py
+ with_mlrun: false
+ auto_build: false
+ requirements: []
+ entry_points:
+ infer:
+ name: infer
+ doc: 'Perform a prediction on a given dataset with the given model. Can perform
+ drift analysis between the sample set
+
+ statistics stored in the model to the current input data. The drift rule is
+ the value per-feature mean of the TVD
+
+ and Hellinger scores according to the thresholds configures here.'
+ parameters:
+ - name: context
+ type: MLClientCtx
+ doc: MLRun context.
+ default: ''
+ - name: model
+ type: str
+ doc: The model Store path.
+ default: ''
+ - name: dataset
+ type: DatasetType
+ doc: The dataset to infer through the model. Can be passed in `inputs` as
+ either a Dataset artifact / Feature vector URI. Or, in `parameters` as a
+ list, dictionary or numpy array.
+ default: ''
+ - name: drop_columns
+ type: Union[str, List[str], int, List[int]]
+ doc: A string / integer or a list of strings / integers that represent the
+ column names / indices to drop. When the dataset is a list or a numpy array
+ this parameter must be represented by integers.
+ default: null
+ - name: label_columns
+ type: Union[str, List[str]]
+ doc: The target label(s) of the column(s) in the dataset for Regression or
+ Classification tasks. The label column can be accessed from the model object,
+ or the feature vector provided if available.
+ default: null
+ - name: log_result_set
+ type: bool
+ doc: Whether to log the result set - a DataFrame of the given inputs concatenated
+ with the predictions. Defaulted to True.
+ default: true
+ - name: result_set_name
+ type: str
+ doc: The db key to set name of the prediction result and the filename. Defaulted
+ to 'prediction'.
+ default: prediction
+ - name: batch_id
+ type: str
+ doc: The ID of the given batch (inference dataset). If `None`, it will be
+ generated. Will be logged as a result of the run.
+ default: null
+ - name: perform_drift_analysis
+ type: bool
+ doc: Whether to perform drift analysis between the sample set of the model
+ object to the dataset given. By default, None, which means it will perform
+ drift analysis if the model has a sample set statistics. Perform drift analysis
+ will produce a data drift table artifact.
+ default: null
+ - name: sample_set
+ type: DatasetType
+ doc: A sample dataset to give to compare the inputs in the drift analysis.
+ The default chosen sample set will always be the one who is set in the model
+ artifact itself.
+ default: null
+ - name: drift_threshold
+ type: float
+ doc: The threshold of which to mark drifts. Defaulted to 0.7.
+ default: 0.7
+ - name: possible_drift_threshold
+ type: float
+ doc: The threshold of which to mark possible drifts. Defaulted to 0.5.
+ default: 0.5
+ - name: inf_capping
+ type: float
+ doc: The value to set for when it reached infinity. Defaulted to 10.0.
+ default: 10.0
+ - name: artifacts_tag
+ type: str
+ doc: Tag to use for all the artifacts resulted from the function.
+ default: ''
+ outputs:
+ - default: ''
+ lineno: 306
+ description: Batch inference (also knows as prediction) for the common ML frameworks
+ (SciKit-Learn, XGBoost and LightGBM) while performing data drift analysis.
+ default_handler: infer
+ disable_auto_mount: false
+ allow_empty_resources: true
+ clone_target_dir: ''
+ env: []
+ priority_class_name: ''
+ preemption_mode: prevent
+ affinity: null
+ tolerations: null
+ security_context: {}
+verbose: false
+
diff --git a/tests/mockServer/data/nuclioStreams.json b/tests/mockServer/data/nuclioStreams.json
index d9bbb7122..4bbd38f42 100644
--- a/tests/mockServer/data/nuclioStreams.json
+++ b/tests/mockServer/data/nuclioStreams.json
@@ -3,42 +3,32 @@
"function-1@stream-name-1": {
"consumerGroup": "ConsumerGroup1",
"containerName": "ContainerName1",
- "streamPath": "/path/of/stream"
+ "streamPath": "/path/of/stream1"
},
- "function-2@stream-name-2": {
- "consumerGroup": "ConsumerGroup2",
- "containerName": "ContainerName2",
+ "function-1@stream-name-2": {
+ "consumerGroup": "ConsumerGroup1",
+ "containerName": "ContainerName1",
"streamPath": "/path/of/stream2"
},
- "function-4@stream-name-4": {
- "consumerGroup": "ConsumerGroup4",
- "containerName": "ContainerName4",
- "streamPath": "/path/of/stream4"
- },
- "function-5@stream-name-5": {
- "consumerGroup": "ConsumerGroup5",
- "containerName": "ContainerName5",
- "streamPath": "/path/of/stream5"
- },
- "function-6@stream-name-6": {
- "consumerGroup": "ConsumerGroup6",
- "containerName": "ContainerName6",
- "streamPath": "/path/of/stream6"
+ "function-2@stream-name-1": {
+ "consumerGroup": "ConsumerGroup1",
+ "containerName": "ContainerName1",
+ "streamPath": "/path/of/stream1"
},
- "function-7@stream-name-7": {
- "consumerGroup": "ConsumerGroup7",
- "containerName": "ContainerName7",
- "streamPath": "/path/of/stream7"
+ "function-2@stream-name-2": {
+ "consumerGroup": "ConsumerGroup1",
+ "containerName": "ContainerName1",
+ "streamPath": "/path/of/stream2"
},
- "function-8@stream-name-8": {
- "consumerGroup": "ConsumerGroup8",
- "containerName": "ContainerName8",
- "streamPath": "/path/of/stream8"
+ "function-2@stream-name-3": {
+ "consumerGroup": "ConsumerGroup2",
+ "containerName": "ContainerName1",
+ "streamPath": "/path/of/stream1"
},
- "function-9@stream-name-9": {
- "consumerGroup": "ConsumerGroup9",
- "containerName": "ContainerName9",
- "streamPath": "/path/of/stream9"
+ "function-2@stream-name-4": {
+ "consumerGroup": "ConsumerGroup2",
+ "containerName": "ContainerName2",
+ "streamPath": "/path/of/stream1"
}
}
}
diff --git a/tests/mockServer/mock.js b/tests/mockServer/mock.js
index f74a3b30e..488491221 100644
--- a/tests/mockServer/mock.js
+++ b/tests/mockServer/mock.js
@@ -27,6 +27,7 @@ import { cloneDeep, remove } from 'lodash'
import frontendSpec from './data/frontendSpec.json'
import projects from './data/projects.json'
import projectsSummary from './data/summary.json'
+import hubItemInference from './data/hubItemInference.json'
import artifacts from './data/artifacts.json'
import featureSets from './data/featureSets.json'
import features from './data/features.json'
@@ -34,7 +35,7 @@ import entities from './data/entities.json'
import featureVectors from './data/featureVectors.json'
import runs from './data/runs.json'
import run from './data/run.json'
-import catalog from './data/catalog.json'
+import itemsCatalog from './data/itemsCatalog.json'
import pipelines from './data/pipelines.json'
import secretKeys from './data/secretKeys.json'
import pipelineIDs from './data/piplineIDs.json'
@@ -348,6 +349,19 @@ function getProjectsSummaries(req, res) {
res.send(projectsSummary)
}
+function getFunctionItem(req, res) {
+ res.send(hubItemInference)
+}
+
+function getFunctionObject (req, res){
+ const urlParams = req.query.url
+ const urlArray = urlParams.split('/')
+ const funcYAMLPath = `./tests/mockServer/data/mlrun/functions/${urlArray[6]}/${urlArray[6]}.yaml`
+ const funcObject = fs.readFileSync(funcYAMLPath, 'utf8')
+
+ res.send(funcObject)
+}
+
function getProjectSummary(req, res) {
const collectedProject = projectsSummary.project_summaries.find(
item => item.name === req.params['project']
@@ -419,7 +433,7 @@ function patchRun(req, res) {
}
function getFunctionCatalog(req, res) {
- res.send(catalog)
+ res.send(itemsCatalog)
}
function getFunctionTemplate(req, res) {
@@ -775,9 +789,6 @@ function getPipeline(req, res) {
}
function getFuncs(req, res) {
- console.log("TEST")
- console.log(req.query)
- //http://localhost:3000/api/v1/projects/default/functions?test=value
const dt = parseInt(Date.now())
const collectedFuncsByPrjTime = funcs.funcs
@@ -801,7 +812,7 @@ function getFuncs(req, res) {
}
else {
collectedFuncs = funcs.funcs
- .filter(func => func.metadata.project === req.params['project']) // req.query.project)
+ .filter(func => func.metadata.project === req.params['project'])
.filter(func => func.metadata.tag === 'latest')
.filter(func => func.status?.state === 'deploying')
@@ -809,8 +820,7 @@ function getFuncs(req, res) {
func.status.state = 'ready'
})
- collectedFuncs = funcs.funcs.filter(func => func.metadata.project === req.params['project']) // req.query.project)
- //.filter(func => func.metadata.name === req.params['func'])
+ collectedFuncs = funcs.funcs.filter(func => func.metadata.project === req.params['project'])
}
if (req.query['name']) {
@@ -827,10 +837,9 @@ function getFuncs(req, res) {
}
function getFunc(req, res) {
- console.log('//////////////////////')
const collectedFunc = funcs.funcs
- .filter(func => func.metadata.project === req.params['project']) // req.query.project) //req.params['project'])
- .filter(func => func.metadata.name === req.params['func']) //req.params['func'])
+ .filter(func => func.metadata.project === req.params['project'])
+ .filter(func => func.metadata.name === req.params['func'])
.filter(func => func.metadata.hash === req.query.hash_key)
let respBody = {}
@@ -1126,34 +1135,78 @@ function postSubmitJob(req, res) {
res.send(respTemplate)
}
+function putTags(req, res){
+ const tagName = req.params.tag
+ const projectName = req.params.project
+
+ let artifactForUpdate = artifacts.artifacts.find(artifact => artifact.tree === req.body.identifiers[0].uid)
+
+ if (artifactForUpdate === undefined){
+ artifactForUpdate = artifacts.artifacts
+ .filter(item => item.metadata)
+ .find(item => item.uid === req.body.identifiers[0].uid)
+
+ artifactForUpdate.metadata.tag = req.params.tag
+ }
+ else{
+ artifactForUpdate.tag = req.params.tag
+ }
+
+ res.send({
+ name: tagName,
+ project: projectName
+ })
+}
+
+function deleteTags(req, res){
+ const collectedArtifact = artifacts.artifacts
+ .find(artifact => ((artifact.metadata && artifact.metadata.project === req.params.project)
+ || artifact.project === req.params.project)
+ && artifact.kind === req.body.identifiers[0].kind
+ && ((artifact.metadata && artifact.metadata.tree === req.body.identifiers[0].uid)
+ || artifact.tree === req.body.identifiers[0].uid))
+
+ if (collectedArtifact) {
+ if (collectedArtifact.metadata){
+ delete collectedArtifact.metadata.tag
+ }
+ else{
+ delete collectedArtifact.tag
+ }
+ }
+
+ res.send()
+}
+
+//TODO: artifact structure ML-4583
function postArtifact(req, res) {
const currentDate = new Date()
- const artifactHash = makeUID(32)
const artifactTag = req.body.tag || 'latest'
const tagObject = artifactTags.find(artifact => artifact.project === req.body.project)
const artifactTemplate = {
- key: req.body.key,
kind: req.body.kind,
- iter: 0,
- tree: req.body.tree,
- target_path: req.body.target_path,
- hash: artifactHash,
- size: null,
- db_key: req.body.db_key,
- description: req.body.description,
- framework: '',
- producer: {
- kind: req.body.producer.kind,
- uri: req.body.producer.uri
+ metadata: {
+ labels: req.body.metadata.labels,
+ key: req.body.metadata.key,
+ project: req.body.metadata.project,
+ tree: req.body.metadata.tree,
+ updated: currentDate.toISOString(),
+ tag: artifactTag
},
- sources: [],
project: req.body.project,
- updated: currentDate.toISOString(),
- tag: artifactTag,
- labels: req.body.labels
+ spec: {
+ db_key: req.body.spec.db_key,
+ producer: {
+ kind: req.body.spec.producer.kind,
+ uri: req.body.spec.producer.uri
+ },
+ target_path: req.body.spec.target_path
+ },
+ status: req.body.status,
+ uid: req.body.uid
+ // description: req.body.description,
}
-
if (req.body.kind === 'model') {
artifactTemplate.model_file = req.body.model_file
}
@@ -1468,6 +1521,9 @@ app.get(`${mlrunAPIIngress}/runs`, getRuns)
app.get(`${mlrunAPIIngress}/run/:project/:uid`, getRun)
app.patch(`${mlrunAPIIngress}/run/:project/:uid`, patchRun)
app.get(`${mlrunIngress}/catalog.json`, getFunctionCatalog)
+app.get(`${mlrunAPIIngress}/hub/sources/:project/items`, getFunctionCatalog)
+app.get(`${mlrunAPIIngress}/hub/sources/:project/items/:uid`, getFunctionItem)
+app.get(`${mlrunAPIIngress}/hub/sources/:project/item-object`, getFunctionObject)
app.get(`${mlrunIngress}/:function/function.yaml`, getFunctionTemplate)
app.get(`${mlrunAPIIngress}/projects/:project/schedules`, getProjectsSchedules)
@@ -1479,8 +1535,11 @@ app.get(`${mlrunAPIIngress}/projects/:project/pipelines/:pipelineID`, getPipelin
app.get(`${mlrunAPIIngress}/projects/:project/artifact-tags`, getProjectsArtifactTags)
app.get(`${mlrunAPIIngress}/projects/:project/artifacts`, getArtifacts)
+app.post(`${mlrunAPIIngress}/projects/:project/artifacts/:uid/:artifact`, postArtifact)
+
+app.put(`${mlrunAPIIngress}/projects/:project/tags/:tag`, putTags)
+app.delete(`${mlrunAPIIngress}/projects/:project/tags/:tag`, deleteTags)
-app.post(`${mlrunAPIIngress}/artifact/:project/:uid/:artifact`, postArtifact)
app.get(
`${mlrunAPIIngress}/projects/:project/feature-sets/:name/references/:tag`,
getProjectsFeatureSets
@@ -1506,8 +1565,6 @@ app.delete(
app.get(`${mlrunAPIIngress}/projects/:project/functions`, getFuncs)
app.get(`${mlrunAPIIngress}/projects/:project/functions/:func`, getFunc)
-//app.get(`${mlrunAPIIngress}/func/:project/:func`, getFunc) - earlier api
-//app.post(`${mlrunAPIIngress}/func/:project/:func`, postFunc) - earlier api
app.post(`${mlrunAPIIngress}/projects/:project/functions/:func`, postFunc)
app.get(
|