summaryrefslogtreecommitdiff
path: root/day9/task5_vue/backend/database
diff options
context:
space:
mode:
Diffstat (limited to 'day9/task5_vue/backend/database')
-rw-r--r--day9/task5_vue/backend/database/__init__.py0
-rw-r--r--day9/task5_vue/backend/database/field_types.py20
-rw-r--r--day9/task5_vue/backend/database/validators.py16
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], {})