diff options
Diffstat (limited to 'day9/task5_vue/backend/database')
| -rw-r--r-- | day9/task5_vue/backend/database/__init__.py | 0 | ||||
| -rw-r--r-- | day9/task5_vue/backend/database/field_types.py | 20 | ||||
| -rw-r--r-- | day9/task5_vue/backend/database/validators.py | 16 |
3 files changed, 20 insertions, 16 deletions
diff --git a/day9/task5_vue/backend/database/__init__.py b/day9/task5_vue/backend/database/__init__.py new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/day9/task5_vue/backend/database/__init__.py diff --git a/day9/task5_vue/backend/database/field_types.py b/day9/task5_vue/backend/database/field_types.py index d0b2c3b..8713882 100644 --- a/day9/task5_vue/backend/database/field_types.py +++ b/day9/task5_vue/backend/database/field_types.py @@ -12,7 +12,7 @@ class Field(ABC): @property @abstractmethod - def sql_line(self): + def sql_line(self) -> str: pass def validate(self, value): @@ -21,7 +21,7 @@ class Field(ABC): class TextField(Field): - def __init__(self, max_length, is_variable_length, nullable, default, validators=None): + def __init__(self, max_length, is_variable_length, nullable, default=None, validators=None): super().__init__(validators) self.max_length = max_length @@ -45,7 +45,7 @@ class TextField(Field): class IntegerField(Field): - def __init__(self, max_length, nullable, is_auto_increment, default, validators=None): + def __init__(self, max_length, nullable, is_auto_increment, default=None, validators=None): super().__init__(validators) self.max_length = max_length @@ -62,7 +62,7 @@ class IntegerField(Field): 'NULL' if self.nullable else 'NOT NULL' ] - if self.default is not None: + if self.default is not None or self.nullable: request.append(f'DEFAULT "{self.default}"') if self.is_auto_increment: @@ -72,7 +72,7 @@ class IntegerField(Field): class DateField(Field): - def __init__(self, nullable, default, validators=None): + def __init__(self, nullable, default=None, validators=None): super().__init__(validators) self.nullable = nullable @@ -84,14 +84,14 @@ class DateField(Field): def sql_line(self): request = ['date', 'NULL' if self.nullable else 'NOT NULL'] - if self.default is not None: + if self.default is not None or self.nullable: request.append(f'DEFAULT "{self.default}"') return ' '.join(request) class TimeField(Field): - def __init__(self, nullable, default, validators=None): + def __init__(self, nullable, default=None, validators=None): super().__init__(validators) self.nullable = nullable @@ -103,14 +103,14 @@ class TimeField(Field): def sql_line(self): request = ['time', 'NULL' if self.nullable else 'NOT NULL'] - if self.default is not None: + if self.default is not None or self.nullable: request.append(f'DEFAULT "{self.default}"') return ' '.join(request) class DatetimeField(Field): - def __init__(self, nullable, default, validators=None): + def __init__(self, nullable, default=None, validators=None): super().__init__(validators) self.nullable = nullable @@ -122,7 +122,7 @@ class DatetimeField(Field): def sql_line(self): request = ['datetime', 'NULL' if self.nullable else 'NOT NULL'] - if self.default is not None: + if self.default is not None or self.nullable: request.append(f'DEFAULT "{self.default}"') return ' '.join(request) diff --git a/day9/task5_vue/backend/database/validators.py b/day9/task5_vue/backend/database/validators.py index e4b7310..112af2b 100644 --- a/day9/task5_vue/backend/database/validators.py +++ b/day9/task5_vue/backend/database/validators.py @@ -32,8 +32,12 @@ class ValidateType(Validator): class ValidateLength(Validator): @staticmethod def validate(value, field_object): + if hasattr(field_object, 'is_variable_length') and not field_object.is_variable_length: + if len(str(value)) < field_object.max_length: + raise ValidationError('Value has too few characters') + if len(str(value)) > field_object.max_length: - raise ValidationError('Value has too many digits') + raise ValidationError('Value has too many characters') class ValidateTime(Validator): @@ -65,14 +69,14 @@ class ValidateDate(Validator): if year < 0: raise ValidationError('Wrong year value') - if month not in range(1, 12): + if month not in range(1, 12 + 1): raise ValidationError('Wrong month value') if month == 2: if year % 4 == 0 and year % 100 != 0 or year % 400 == 0: - febr_range = range(1, 29) + febr_range = range(1, 29 + 1) else: - febr_range = range(1, 28) + febr_range = range(1, 28 + 1) if day not in febr_range: raise ValidationError('Wrong day value') else: @@ -81,7 +85,7 @@ class ValidateDate(Validator): 6: 30, 7: 31, 8: 31, 9: 30, 10: 31, 11: 30, 12: 31 }.get(month) - if day not in range(1, days_count): + if day not in range(1, days_count + 1): raise ValidationError('Wrong day value') @@ -93,4 +97,4 @@ class ValidateDatetime(Validator): raise ValidationError('Wrong datetime format') else: ValidateDate.validate(datetime[0], {}) - ValidateTime.validate(datetime[1], {})
\ No newline at end of file + ValidateTime.validate(datetime[1], {}) |