Module configurator.fields
Settings fields
Expand source code
"""Settings fields"""
from abc import ABC
from typing import Any
import re
class ValidationError(Exception):
"""
Thrown when value for the Field didn't pass the validation.
"""
class Field(ABC):
"""
Base Field type. All objects used as settings fields should be subclass of Field.
"""
type_: type = object
default: Any = None
def __init__(self, required: bool = True, default: Any = None):
"""
Creates new Field object.
Args:
required: set true if field is crucial for the project and should be always provided
default: default field value if not specified in config
"""
self.required = required
if default is not None:
self.default = self.validate(default)
def validate(self, value: Any) -> Any:
"""
Validate if value can be assign to the field.
Checks if value's type is correct.
Args:
value: value to assign to the Field
Returns:
safe to assign value
"""
if not isinstance(value, self.type_):
raise ValidationError('Type mismatch')
return value
class Integer(Field):
"""
Class for number type fields.
"""
type_ = int
default = 0
class PositiveInteger(Integer):
"""
Class for positive integers - natural numbers.
"""
default = 1
def validate(self, value: int) -> int:
value = super().validate(value)
if value <= 0:
raise ValidationError('PositiveInteger value must be greater than 0.')
return value
class String(Field):
"""
Class for string type fields.
"""
type_ = str
default = ''
class Email(String):
"""
Class for email fields.
"""
def validate(self, value: str) -> str:
"""Validates email using simple regex."""
value = super().validate(value)
regex = re.compile(r'^\S+@\S+\.\S+$')
if regex.fullmatch(value) is None:
raise ValidationError('Provided string is not a valid email.')
return value
class Boolean(Field):
"""
Class for bool type fields.
"""
type_ = bool
default = False
class Float(Field):
"""
Class for floating-point numbers.
"""
type_ = float
default = 0.0
class Url(String):
"""
Class for url fields.
"""
def validate(self, value: str) -> str:
"""Validates url using regular expression."""
value = super().validate(value)
regex = regex = re.compile(
r'^https?://' # http:// or https://
r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}\.?|' # domain...
r'localhost|' # localhost...
r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...or ip
r'(?::\d+)?' # optional port
r'(?:/?|[/?]\S+)$', re.IGNORECASE)
if regex.fullmatch(value) is None:
raise ValidationError('Provided string is not a valid url.')
return value
Classes
class Boolean (required: bool = True, default: Any = None)
-
Class for bool type fields.
Creates new Field object.
Args
required
- set true if field is crucial for the project and should be always provided
default
- default field value if not specified in config
Expand source code
class Boolean(Field): """ Class for bool type fields. """ type_ = bool default = False
Ancestors
- Field
- abc.ABC
Class variables
var default : Any
Inherited members
class Email (required: bool = True, default: Any = None)
-
Class for email fields.
Creates new Field object.
Args
required
- set true if field is crucial for the project and should be always provided
default
- default field value if not specified in config
Expand source code
class Email(String): """ Class for email fields. """ def validate(self, value: str) -> str: """Validates email using simple regex.""" value = super().validate(value) regex = re.compile(r'^\S+@\S+\.\S+$') if regex.fullmatch(value) is None: raise ValidationError('Provided string is not a valid email.') return value
Ancestors
Methods
def validate(self, value: str) ‑> str
-
Validates email using simple regex.
Expand source code
def validate(self, value: str) -> str: """Validates email using simple regex.""" value = super().validate(value) regex = re.compile(r'^\S+@\S+\.\S+$') if regex.fullmatch(value) is None: raise ValidationError('Provided string is not a valid email.') return value
Inherited members
class Field (required: bool = True, default: Any = None)
-
Base Field type. All objects used as settings fields should be subclass of Field.
Creates new Field object.
Args
required
- set true if field is crucial for the project and should be always provided
default
- default field value if not specified in config
Expand source code
class Field(ABC): """ Base Field type. All objects used as settings fields should be subclass of Field. """ type_: type = object default: Any = None def __init__(self, required: bool = True, default: Any = None): """ Creates new Field object. Args: required: set true if field is crucial for the project and should be always provided default: default field value if not specified in config """ self.required = required if default is not None: self.default = self.validate(default) def validate(self, value: Any) -> Any: """ Validate if value can be assign to the field. Checks if value's type is correct. Args: value: value to assign to the Field Returns: safe to assign value """ if not isinstance(value, self.type_): raise ValidationError('Type mismatch') return value
Ancestors
- abc.ABC
Subclasses
Class variables
var default : Any
var type_ : type
-
The base class of the class hierarchy.
When called, it accepts no arguments and returns a new featureless instance that has no instance attributes and cannot be given any.
Methods
def validate(self, value: Any) ‑> Any
-
Validate if value can be assign to the field. Checks if value's type is correct.
Args
value
- value to assign to the Field
Returns
safe to assign value
Expand source code
def validate(self, value: Any) -> Any: """ Validate if value can be assign to the field. Checks if value's type is correct. Args: value: value to assign to the Field Returns: safe to assign value """ if not isinstance(value, self.type_): raise ValidationError('Type mismatch') return value
class Float (required: bool = True, default: Any = None)
-
Class for floating-point numbers.
Creates new Field object.
Args
required
- set true if field is crucial for the project and should be always provided
default
- default field value if not specified in config
Expand source code
class Float(Field): """ Class for floating-point numbers. """ type_ = float default = 0.0
Ancestors
- Field
- abc.ABC
Class variables
var default : Any
Inherited members
class Integer (required: bool = True, default: Any = None)
-
Class for number type fields.
Creates new Field object.
Args
required
- set true if field is crucial for the project and should be always provided
default
- default field value if not specified in config
Expand source code
class Integer(Field): """ Class for number type fields. """ type_ = int default = 0
Ancestors
- Field
- abc.ABC
Subclasses
Class variables
var default : Any
Inherited members
class PositiveInteger (required: bool = True, default: Any = None)
-
Class for positive integers - natural numbers.
Creates new Field object.
Args
required
- set true if field is crucial for the project and should be always provided
default
- default field value if not specified in config
Expand source code
class PositiveInteger(Integer): """ Class for positive integers - natural numbers. """ default = 1 def validate(self, value: int) -> int: value = super().validate(value) if value <= 0: raise ValidationError('PositiveInteger value must be greater than 0.') return value
Ancestors
Class variables
var default : Any
Inherited members
class String (required: bool = True, default: Any = None)
-
Class for string type fields.
Creates new Field object.
Args
required
- set true if field is crucial for the project and should be always provided
default
- default field value if not specified in config
Expand source code
class String(Field): """ Class for string type fields. """ type_ = str default = ''
Ancestors
- Field
- abc.ABC
Subclasses
Class variables
var default : Any
Inherited members
class Url (required: bool = True, default: Any = None)
-
Class for url fields.
Creates new Field object.
Args
required
- set true if field is crucial for the project and should be always provided
default
- default field value if not specified in config
Expand source code
class Url(String): """ Class for url fields. """ def validate(self, value: str) -> str: """Validates url using regular expression.""" value = super().validate(value) regex = regex = re.compile( r'^https?://' # http:// or https:// r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}\.?|' # domain... r'localhost|' # localhost... r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...or ip r'(?::\d+)?' # optional port r'(?:/?|[/?]\S+)$', re.IGNORECASE) if regex.fullmatch(value) is None: raise ValidationError('Provided string is not a valid url.') return value
Ancestors
Methods
def validate(self, value: str) ‑> str
-
Validates url using regular expression.
Expand source code
def validate(self, value: str) -> str: """Validates url using regular expression.""" value = super().validate(value) regex = regex = re.compile( r'^https?://' # http:// or https:// r'(?:(?:[A-Z0-9](?:[A-Z0-9-]{0,61}[A-Z0-9])?\.)+[A-Z]{2,6}\.?|' # domain... r'localhost|' # localhost... r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})' # ...or ip r'(?::\d+)?' # optional port r'(?:/?|[/?]\S+)$', re.IGNORECASE) if regex.fullmatch(value) is None: raise ValidationError('Provided string is not a valid url.') return value
Inherited members
class ValidationError (*args, **kwargs)
-
Thrown when value for the Field didn't pass the validation.
Expand source code
class ValidationError(Exception): """ Thrown when value for the Field didn't pass the validation. """
Ancestors
- builtins.Exception
- builtins.BaseException