1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-23 17:34:34 +03:00
samba-mirror/python/samba/netcmd/validators.py
Rob van der Linde dc513a82a6 python: move Validator base class and ValidationError to getopt
It makes more sense for these to exist in the top package, because they are used by SambaOption.

validators.py can still exist in netcmd, just not the base class and exception.

Signed-off-by: Rob van der Linde <rob@catalyst.net.nz>
Reviewed-by: Douglas Bagnall <douglas.bagnall@catalyst.net.nz>
Reviewed-by: Andrew Bartlett <abartlet@samba.org>
2023-10-24 23:31:29 +00:00

67 lines
2.3 KiB
Python

# Unix SMB/CIFS implementation.
#
# validators
#
# Copyright (C) Catalyst.Net Ltd. 2023
#
# Written by Rob van der Linde <rob@catalyst.net.nz>
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation; either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <http://www.gnu.org/licenses/>.
#
from samba.getopt import Validator, ValidationError
class Range(Validator):
"""Checks if the value is within range min ... max."""
def __init__(self, min=None, max=None):
if min is None and max is None:
raise ValueError("Range without a min and max doesn't make sense.")
self.min = min
self.max = max
def __call__(self, field, value):
"""Check if value is within the range min ... max.
It is possible to omit min, or omit max, in which case a more
tailored error message is returned.
"""
if self.min is not None and self.max is None:
if value < self.min:
raise ValidationError(f"{field} must be at least {self.min}")
elif self.min is None and self.max is not None:
if value > self.max:
raise ValidationError(
f"{field} cannot be greater than {self.max}")
elif self.min is not None and self.max is not None:
if value < self.min or value > self.max:
raise ValidationError(
f"{field} must be between {self.min} and {self.max}")
class OneOf(Validator):
"""Checks if the value is in a list of possible choices."""
def __init__(self, choices):
self.choices = sorted(choices)
def __call__(self, field, value):
if value not in self.choices:
allowed_choices = ", ".join(self.choices)
raise ValidationError(f"{field} must be one of: {allowed_choices}")