misc in Parameter descriptor

This commit is contained in:
Benoît Sierro
2021-10-19 09:55:22 +02:00
parent cb19f65224
commit 7e27346385

View File

@@ -9,7 +9,7 @@ import re
import time import time
from collections import defaultdict from collections import defaultdict
from copy import copy, deepcopy from copy import copy, deepcopy
from dataclasses import asdict, dataclass, fields from dataclasses import asdict, dataclass, fields, Field
from functools import cache, lru_cache from functools import cache, lru_cache
from pathlib import Path from pathlib import Path
from typing import ( from typing import (
@@ -270,13 +270,17 @@ def func_validator(name, n):
class Parameter: class Parameter:
def __init__(self, validator, converter=None, default=None, display_info=None, rules=None): def __init__(
self,
validator: Callable[[str, Any], None],
converter: Callable = None,
default=None,
display_info: tuple[float, str] = None,
):
"""Single parameter """Single parameter
Parameters Parameters
---------- ----------
tpe : type
type of the paramter
validator : Callable[[str, Any], None] validator : Callable[[str, Any], None]
signature : validator(name, value) signature : validator(name, value)
must raise a ValueError when value doesn't fit the criteria checked by must raise a ValueError when value doesn't fit the criteria checked by
@@ -291,21 +295,17 @@ class Parameter:
self.converter = converter self.converter = converter
self.default = default self.default = default
self.display_info = display_info self.display_info = display_info
if rules is None:
self.rules = []
else:
self.rules = rules
def __set_name__(self, owner, name): def __set_name__(self, owner, name):
self.name = name self.name = name
def __get__(self, instance, owner): def __get__(self, instance, owner):
if not instance: if instance is None:
return self return self
return instance.__dict__[self.name] return instance.__dict__[self.name]
def __delete__(self, instance): def __delete__(self, instance):
del instance.__dict__[self.name] raise AttributeError("Cannot delete parameter")
def __set__(self, instance, value): def __set__(self, instance, value):
if isinstance(value, Parameter): if isinstance(value, Parameter):