网关V1,添加批量写
This commit is contained in:
82
gateway/config_validator.py
Normal file
82
gateway/config_validator.py
Normal file
@ -0,0 +1,82 @@
|
||||
import json
|
||||
from jsonschema import validate, Draft7Validator, FormatChecker
|
||||
|
||||
class ConfigValidator:
|
||||
"""配置文件验证器"""
|
||||
|
||||
SCHEMA = {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"plcs": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {"type": "string", "minLength": 1},
|
||||
"ip": {"type": "string", "format": "ipv4"},
|
||||
"rack": {"type": "integer", "minimum": 0},
|
||||
"slot": {"type": "integer", "minimum": 0},
|
||||
"areas": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {"type": "string", "minLength": 1},
|
||||
"type": {"type": "string", "enum": ["read", "write", "read_write"]},
|
||||
"db_number": {"type": "integer", "minimum": 1},
|
||||
"offset": {"type": "integer", "minimum": 0},
|
||||
"size": {"type": "integer", "minimum": 1},
|
||||
"structure": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"properties": {
|
||||
"name": {"type": "string"},
|
||||
"type": {"type": "string", "enum": ["bool", "byte", "int", "dint", "real", "word", "dword"]},
|
||||
"offset": {"type": "integer", "minimum": 0},
|
||||
"bit": {"type": "integer", "minimum": 0, "maximum": 7} # 修复了这里
|
||||
},
|
||||
"required": ["name", "type", "offset"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["name", "type", "db_number", "offset", "size"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["name", "ip", "rack", "slot", "areas"]
|
||||
}
|
||||
}
|
||||
},
|
||||
"required": ["plcs"]
|
||||
}
|
||||
|
||||
@staticmethod
|
||||
def validate_config(config):
|
||||
"""验证配置是否符合规范"""
|
||||
try:
|
||||
# 添加IPv4格式验证
|
||||
validator = Draft7Validator(
|
||||
ConfigValidator.SCHEMA,
|
||||
format_checker=FormatChecker(["ipv4"])
|
||||
)
|
||||
validator.validate(config)
|
||||
return True, None
|
||||
except Exception as e:
|
||||
return False, str(e)
|
||||
|
||||
@staticmethod
|
||||
def is_valid_ip(ip):
|
||||
"""验证IP地址格式"""
|
||||
parts = ip.split('.')
|
||||
if len(parts) != 4:
|
||||
return False
|
||||
for part in parts:
|
||||
if not part.isdigit():
|
||||
return False
|
||||
num = int(part)
|
||||
if num < 0 or num > 255:
|
||||
return False
|
||||
return True
|
||||
Reference in New Issue
Block a user