Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Empty file removed steps/src/.gitkeep
Empty file.
19 changes: 19 additions & 0 deletions steps/src/verify_schema/item.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
apiVersion: v1
categories:
- data-preparation
- model-serving
description: 'This step verifies the event is aligned with the provided schema.'
example: verify_schema.ipynb
generationDate: 2025-12-29:11-59
hidden: false
labels:
author: Iguazio
mlrunVersion: 1.10.0-rc44
name: verify_schema
className: VerifySchema
defaultHandler:
spec:
filename: verify_schema.py
image: mlrun/mlrun
requirements:
version: 1.0.0
37 changes: 37 additions & 0 deletions steps/src/verify_schema/test_verify_schema.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
from verify_schema import VerifySchema

class TestVerifySchema:
def test_verify_schema(self):
schema = ["id", "name", "active"]
verifier = VerifySchema(name="test_verifier", schema=schema)

# Test with valid event
event = {
"id": 1,
"name": "Test Event",
"active": True
}
result = verifier.do(event)
assert result == event

# Test with missing key
event_missing_key = {
"id": 1,
"name": "Test Event"
}
try:
verifier.do(event_missing_key)
except KeyError as e:
assert "key 'active' not found in event" in str(e)

# Test with unexpected key
event_unexpected_key = {
"id": 1,
"name": "Test Event",
"active": True,
"extra": "unexpected"
}
try:
verifier.do(event_unexpected_key)
except KeyError as e:
assert "unexpected key 'extra' found in event" in str(e)
33 changes: 33 additions & 0 deletions steps/src/verify_schema/verify_schema.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
{
"cells": [
{
"metadata": {},
"cell_type": "code",
"outputs": [],
"execution_count": null,
"source": "",
"id": "556b36b9b89d0515"
}
],
"metadata": {
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 2
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython2",
"version": "2.7.6"
}
},
"nbformat": 4,
"nbformat_minor": 5
}
28 changes: 28 additions & 0 deletions steps/src/verify_schema/verify_schema.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# Copyright 2025 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.
#

class VerifySchema:
def __init__(self, name, schema: list):
self.name = name
self.schema = schema

def do(self, event: dict):
missing = set(self.schema) - set(event)
unexpected = set(event) - set(self.schema)
if missing:
raise KeyError(f"Schema verification failed: missing keys {missing} in event: {event}")
if unexpected:
raise KeyError(f"Schema verification failed: unexpected keys {unexpected} in event: {event}")
return event
Loading