|
1 | 1 | from typing import Any |
2 | 2 |
|
| 3 | +from starlette.requests import Request |
| 4 | +from tortoise import Model |
| 5 | + |
| 6 | +from fast_tmp.amis.forms import Control, ControlEnum |
3 | 7 | from fast_tmp.contrib.auth.hashers import make_password |
| 8 | +from fast_tmp.responses import TmpValueError |
4 | 9 | from fast_tmp.site.util import StrControl |
5 | 10 |
|
6 | 11 |
|
| 12 | +# todo 以后考虑创建更新的control分离 |
7 | 13 | class Password(StrControl): |
8 | | - def amis_2_orm(self, value: Any) -> Any: |
9 | | - return make_password(value) |
| 14 | + _control_type = ControlEnum.input_password |
| 15 | + _update_control = None |
| 16 | + |
| 17 | + async def get_value(self, request: Request, obj: Model) -> Any: |
| 18 | + return None |
| 19 | + |
| 20 | + async def set_value(self, request: Request, obj: Model, value: Any): |
| 21 | + if obj.pk is not None: |
| 22 | + old_password = getattr(obj, self.name) |
| 23 | + if value != old_password and len(value) > 0: |
| 24 | + setattr(obj, self.name, make_password(value)) |
| 25 | + else: |
| 26 | + if not value: |
| 27 | + raise TmpValueError("password can not be none.") |
| 28 | + await super().set_value(request, obj, value) |
| 29 | + |
| 30 | + def get_control(self, request: Request) -> Control: |
| 31 | + if not self._control: |
| 32 | + self._control = Control(type=self._control_type, name=self.name, label=self.label) |
| 33 | + if not self._field.null: # type: ignore |
| 34 | + if self._field.default is not None: # type: ignore |
| 35 | + self._control.value = self.orm_2_amis(self._field.default) # type: ignore |
| 36 | + return self._control |
0 commit comments