Steve Howell
92a552d2ad
REQ: Check value in update_user_custom_profile_data.
...
This tightens our checking of user-supplied data
for this endpoint:
path('users/me/profile_data', rest_dispatch,
{'PATCH': 'zerver.views.custom_profile_fields.update_user_custom_profile_data',
...
We now explicitly require the `value` field
to be present in the dicts being passed in
here, as part of `REQ`. There is no reason
that our current clients would be sending
extra fields here, and we would just ignore
them anyway, so we also move to using
check_dict_only.
Here is some relevant webapp code (see settings_account.js):
fields.push({id: field.id, value: user_ids});
update_user_custom_profile_fields(fields, channel.patch);
settings_ui.do_settings_change(method, "/json/users/me/profile_data",
{data: JSON.stringify([field])}, spinner_element);
The webapp code sends fields one at a time
as one-element arrays, which is strange, but
that is out of the scope of this change.
2020-06-25 10:54:15 -07:00
Anders Kaseorg
1d545efac2
custom_profile_fields: Replace a type: ignore with an assert.
...
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2020-06-23 11:29:54 -07:00
Anders Kaseorg
7e9db327b3
request: Improve validator type so mypy can check it against REQ.
...
Old: a validator returns None on success and returns an error string
on error.
New: a validator returns the validated value on success and raises
ValidationError on error.
This allows mypy to catch mismatches between the annotated type of a
REQ parameter and the type that the validator actually validates.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2020-06-20 22:29:15 -07:00
Anders Kaseorg
475fc5910f
update_user_custom_profile_data: Validate data type correctly.
...
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2020-06-20 22:29:15 -07:00
Anders Kaseorg
365fe0b3d5
python: Sort imports with isort.
...
Fixes #2665 .
Regenerated by tabbott with `lint --fix` after a rebase and change in
parameters.
Note from tabbott: In a few cases, this converts technical debt in the
form of unsorted imports into different technical debt in the form of
our largest files having very long, ugly import sequences at the
start. I expect this change will increase pressure for us to split
those files, which isn't a bad thing.
Signed-off-by: Anders Kaseorg <anders@zulip.com>
2020-06-11 16:45:32 -07:00
Anders Kaseorg
fead14951c
python: Convert assignment type annotations to Python 3.6 style.
...
This commit was split by tabbott; this piece covers the vast majority
of files in Zulip, but excludes scripts/, tools/, and puppet/ to help
ensure we at least show the right error messages for Xenial systems.
We can likely further refine the remaining pieces with some testing.
Generated by com2ann, with whitespace fixes and various manual fixes
for runtime issues:
- invoiced_through: Optional[LicenseLedger] = models.ForeignKey(
+ invoiced_through: Optional["LicenseLedger"] = models.ForeignKey(
-_apns_client: Optional[APNsClient] = None
+_apns_client: Optional["APNsClient"] = None
- notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- signup_notifications_stream: Optional[Stream] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
+ signup_notifications_stream: Optional["Stream"] = models.ForeignKey('Stream', related_name='+', null=True, blank=True, on_delete=CASCADE)
- author: Optional[UserProfile] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
+ author: Optional["UserProfile"] = models.ForeignKey('UserProfile', blank=True, null=True, on_delete=CASCADE)
- bot_owner: Optional[UserProfile] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
+ bot_owner: Optional["UserProfile"] = models.ForeignKey('self', null=True, on_delete=models.SET_NULL)
- default_sending_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
- default_events_register_stream: Optional[Stream] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_sending_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
+ default_events_register_stream: Optional["Stream"] = models.ForeignKey('zerver.Stream', null=True, related_name='+', on_delete=CASCADE)
-descriptors_by_handler_id: Dict[int, ClientDescriptor] = {}
+descriptors_by_handler_id: Dict[int, "ClientDescriptor"] = {}
-worker_classes: Dict[str, Type[QueueProcessingWorker]] = {}
-queues: Dict[str, Dict[str, Type[QueueProcessingWorker]]] = {}
+worker_classes: Dict[str, Type["QueueProcessingWorker"]] = {}
+queues: Dict[str, Dict[str, Type["QueueProcessingWorker"]]] = {}
-AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional[LDAPSearch] = None
+AUTH_LDAP_REVERSE_EMAIL_SEARCH: Optional["LDAPSearch"] = None
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 11:02:32 -07:00
Anders Kaseorg
f8c95cda51
mypy: Add specific codes to type: ignore annotations.
...
https://mypy.readthedocs.io/en/stable/error_codes.html
Signed-off-by: Anders Kaseorg <anders@zulipchat.com>
2020-04-22 10:46:33 -07:00
Mateusz Mandera
4166c901ef
do_update_user_custom_profile_data: Rename to ..._if_changed.
...
This adds clarity to the fact that the function no longer does
anything if the field values haven't changed.
2019-10-01 13:52:43 -07:00
Yashashvi Dave
e05429b6a9
custom fields: Add default external account custom fields.
2019-08-28 15:35:53 -07:00
Yashashvi Dave
ed5cb6c28b
custom profile fields: Extract field validation function.
2019-08-25 20:59:08 -07:00
Rishi Gupta
b37c6a8644
custom profile: Update a few error messages.
2019-08-05 20:59:47 -07:00
Yashashvi Dave
d7ee2aced1
models: Add `external_account` in custom profile field types.
...
Add new custom profile field type, External account.
External account field links user's social media
profile with account. e.g. GitHub, Twitter, etc.
Fixes part of #12302
2019-07-09 17:21:54 -07:00
Yashashvi Dave
0b4384f4cd
custom profile fields: Extract function `validate_custom_field_data`.
2019-06-17 14:56:02 -07:00
Yashashvi Dave
f25e00bcaa
zever/lib/validator: Rename function to `validate_choice_field_data`.
2019-06-06 22:36:16 -07:00
Anders Kaseorg
4e21cc0152
views: Remove unused imports.
...
Signed-off-by: Anders Kaseorg <andersk@mit.edu>
2019-02-02 17:23:43 -08:00
Hemanth V. Alluri
716bcad393
custom profile fields: Extract check_remove_user_custom_profile_value.
...
This moves the logic for deleting the user's custom profile field
value in the remove_user_custom_profile_data view function to a method
named check_remove_user_custom_profile_value in actions.py, so that we
can reuse it in the next commit.
2019-01-15 15:28:16 -08:00
Hemanth V. Alluri
6b1d724f5c
zerver: Add bugdown rendering for text custom profile fields.
...
This is the first step of letting users use Zulip markdown in their
SHORT_TEXT and LONG_TEXT custom profile fields, so that they can
include emphasis, links, etc.
This doesn't include any frontend logic yet, however.
2018-11-29 09:47:32 -08:00
Yashashvi Dave
4ceb4b607f
zerver/lib/users.py: Extract func `validate_user_custom_profile_data`.
...
Extract function `validate_user_custom_profile_data` to validate
user's custom profile field values according to field type.
2018-10-31 15:36:44 -07:00
Yashashvi Dave
d5153bd136
events: Convert custom user field value to json object on update event.
...
In user type custom field, field value is list of user ids. We weren't
converting list to json object in update event payload. This throws
error in frontend, cause we store stringify representation of custom
field value. Therefore, after update event is recieved field-value-
type gets updated to array from string which throws json parsing error.
2018-08-22 22:45:08 -07:00
Yashashvi Dave
8ef0c6d99a
custom profile field: Add length validation on field name and hint.
...
Add max length validation for custom field name and hint
on create-field and update-field backend views and
frontend forms.
Fixes #10284 .
2018-08-17 08:37:27 -07:00
Yashashvi Dave
2a73b2b805
custom profile field: Add at-least-one-choice validation for choice field.
...
Add validation at-least-one-choice required for every choice type field
in backend.
2018-08-14 10:17:57 -07:00
Yashashvi Dave
8909cb1d15
custom fields: Allow list of users in user type of custom fields.
...
Allow user to add more than one user-value in user type of custom
fields.
Tweaked by tabbott to improve the models.py code and type annotations.
2018-06-16 09:37:49 -07:00
Yashashvi Dave
f7f039e772
custom fields: Add endpoint to delete value of custom profile data.
...
Add delete endpoint at `users/me/profile_data` to delete value of
custom profile data.
Fixes #9669
2018-06-07 08:35:04 -07:00
Yashashvi Dave
e82c879b85
custom fields: Add user type of custom fields.
...
Fixes #8878
2018-05-27 23:01:21 -07:00
Angelika Serwa
f4f64243dd
custom_profile_fields: Support changing the sort order of the fields.
...
Tweaked by tabbott for variable naming and the URL.
Closes #8879 .
2018-04-30 18:17:41 -07:00
Yashashvi Dave
a97a00a4c6
custom fields: Replace field id with field name in error message.
2018-04-30 10:53:23 -07:00
Umair Khan
cf2f6b38dd
profile: Add choice field.
...
Fixes part of #8878
2018-04-26 00:35:51 -07:00
Umair Khan
a1b384039c
profile: Check field_type against FIELD_TYPE_CHOICES.
2018-04-25 23:28:27 -07:00
Tim Abbott
79e8bff8fa
views: Change use of typing.Text to str.
...
This is the first part of a general migration of our typing codebase
to use the simpler `str` for strings.
2018-04-23 18:51:23 -07:00
Umair Khan
0420b89468
profile: Add hint attribute to custom profile fields.
...
This is the model for #8876 .
2018-04-19 11:32:35 -07:00
nyan-salmon
0fd0332a2c
mypy: Use Python 3 type syntax in zerver/views/custom_profile_fields.py.
2017-12-26 08:34:06 -05:00
Tim Abbott
1cd017288d
views: Fix imports of REQ/has_request_variables from the wrong place.
...
These were never in zerver/decorator.py, and so it makes sense to
import them zerver/lib/request.py, mostly for ease of finding things.
2017-10-27 15:07:31 -07:00
rht
45e8ce559d
zerver/views: Use python 3 syntax for typing.
2017-10-26 21:58:22 -07:00
rht
15ca13c8de
zerver/views: Remove absolute_import.
2017-09-27 10:00:39 -07:00
Tim Abbott
9bf02fb913
custom_profile: Prevent bot users from accessing endpoint.
2017-07-31 13:08:06 -07:00
Umair Khan
cf3b6c6ca9
profile: Support custom profile data.
...
Implements backend for #1760 .
2017-04-18 15:20:59 -07:00