mirror of
https://github.com/zulip/zulip.git
synced 2025-11-07 07:23:22 +00:00
types: Convert ProfileDataElement to Python 3.6 style and total.
The Python 3.6 style does support non-total and even partially-total TypedDict, but total gives us better guarantees. Signed-off-by: Anders Kaseorg <anders@zulip.com>
This commit is contained in:
committed by
Tim Abbott
parent
686ae3eef4
commit
46d0018fbb
@@ -11,16 +11,18 @@ Validator = Callable[[str, object], Optional[str]]
|
|||||||
ExtendedValidator = Callable[[str, str, object], Optional[str]]
|
ExtendedValidator = Callable[[str, str, object], Optional[str]]
|
||||||
RealmUserValidator = Callable[[int, List[int], bool], Optional[str]]
|
RealmUserValidator = Callable[[int, List[int], bool], Optional[str]]
|
||||||
|
|
||||||
ProfileDataElement = TypedDict('ProfileDataElement', {
|
class ProfileDataElementBase(TypedDict):
|
||||||
'id': int,
|
id: int
|
||||||
'name': str,
|
name: str
|
||||||
'type': int,
|
type: int
|
||||||
'hint': Optional[str],
|
hint: Optional[str]
|
||||||
'field_data': Optional[str],
|
field_data: Optional[str]
|
||||||
'order': int,
|
order: int
|
||||||
'value': str,
|
|
||||||
'rendered_value': Optional[str],
|
class ProfileDataElement(ProfileDataElementBase):
|
||||||
}, total=False) # TODO: Can we remove this requirement?
|
value: str
|
||||||
|
rendered_value: Optional[str]
|
||||||
|
|
||||||
ProfileData = List[ProfileDataElement]
|
ProfileData = List[ProfileDataElement]
|
||||||
|
|
||||||
FieldElement = Tuple[int, str, Validator, Callable[[Any], Any], str]
|
FieldElement = Tuple[int, str, Validator, Callable[[Any], Any], str]
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ from zerver.lib.types import (
|
|||||||
ExtendedValidator,
|
ExtendedValidator,
|
||||||
FieldElement,
|
FieldElement,
|
||||||
ProfileData,
|
ProfileData,
|
||||||
ProfileDataElement,
|
ProfileDataElementBase,
|
||||||
RealmUserValidator,
|
RealmUserValidator,
|
||||||
UserFieldElement,
|
UserFieldElement,
|
||||||
Validator,
|
Validator,
|
||||||
@@ -1127,9 +1127,16 @@ class UserProfile(AbstractBaseUser, PermissionsMixin):
|
|||||||
value = converter(value)
|
value = converter(value)
|
||||||
|
|
||||||
field_data = field.as_dict()
|
field_data = field.as_dict()
|
||||||
field_data['value'] = value
|
data.append({
|
||||||
field_data['rendered_value'] = rendered_value
|
'id': field_data['id'],
|
||||||
data.append(field_data)
|
'name': field_data['name'],
|
||||||
|
'type': field_data['type'],
|
||||||
|
'hint': field_data['hint'],
|
||||||
|
'field_data': field_data['field_data'],
|
||||||
|
'order': field_data['order'],
|
||||||
|
'value': value,
|
||||||
|
'rendered_value': rendered_value,
|
||||||
|
})
|
||||||
|
|
||||||
return data
|
return data
|
||||||
|
|
||||||
@@ -2823,7 +2830,7 @@ class CustomProfileField(models.Model):
|
|||||||
class Meta:
|
class Meta:
|
||||||
unique_together = ('realm', 'name')
|
unique_together = ('realm', 'name')
|
||||||
|
|
||||||
def as_dict(self) -> ProfileDataElement:
|
def as_dict(self) -> ProfileDataElementBase:
|
||||||
return {
|
return {
|
||||||
'id': self.id,
|
'id': self.id,
|
||||||
'name': self.name,
|
'name': self.name,
|
||||||
|
|||||||
Reference in New Issue
Block a user