## [2.9.7] - 2021-10-11

### Fixed
- onAuthData hook
- hide LCFile.url when failed to upload file

## [2.9.6] - 2021-09-15

### Added
- onAuthData hook.

## [2.9.5] - 2021-08-20
### Fixed
- Forgot to send hook key in request header.

## [2.9.4] - 2021-07-13
### Fixed
- update qiniu sdk to fix parameter mismatch exception (#521)

Thank berry_shanghai for bringing this issue to our attention.

## [2.9.3] - 2021-05-19
### Fixed
- dependency issues with werkzeug >= 2.0.0

## [2.9.2] - 2021-03-05
### Fixed
- Python packaging issue causing installation failure on Python 2.7.

## [2.9.1] - 2021-03-03
### Changed
- Update dependencies: really support Python 3.9 and drop support for Python 3.5.

## [2.9.0] - 2020-11-26
### Added
- Allow specifying uploaded file path with MasterKey.
- Add Python 3.9 in CI tests.

## [2.8.1] - 2020-10-21
### Changed
- Remove deprecated internal interface invocation when saving external files.

## [2.8.0] - 2020-07-15
### Added
- `request_change_phone_number` and `change_phone_number` to verify mobile number *before* updating it.
- `request_sms_code` now accepts phone number in E.164 format.

## [2.7.1] - 2020-06-18
### Fixed
- LeanEngineError now encodes valid HTTP status code.
  Previously it reused the `code` parameter, which would result in an invalid HTTP status code encoded,
  if the value of the `code` parameter is not a valid HTTP status code.
  You can also use the new status parameter to specify the HTTP status code now.

## [2.7.0] - 2020-05-21
### Added
- `_messageUpdate` hook
- `push.send` supports `prod` parameter

## [2.6.1] - 2020-05-06
### Fixed
- HttpsRedirectMiddleware now works with projects not using cloud functions
- regexp escaping issues

## [2.6.0] - 2020-04-09
### Added
- `_conversationAdded` and `_conversationRemoved` hooks

## [2.5.1] - 2020-03-10
### Fixed
- dependency issues with werkzeug

## [2.5.0] - 2019-12-30
### Added
- _rtmClientSign hook

## [2.4.0] - 2019-12-11
### Added
- creating conversations supports `is_unique`

## [2.3.0] - 2019-12-02
### Added
- support for Android Key (`LEANCLOUD_APP_ANDX_KEY`) in LeanEngine
- push.send: new param `flow_control`

## [2.2.0] - 2019-10-24
### Added
- _clientOnline and _clientOffline hooks
### Fixed
- fix _merge_metadata by @jinke18
- typo in object_.get parameter

## [2.1.14] - 2019-07-05
### Fixed
- dependency issues with requests and werkzeug
- unable to request api for applications hosted in US node

## [2.1.13] - 2019-06-19
### Fixed
- dependency issues with requests and urllib3

## [2.1.12] - 2019-05-24
### Fixed
- Push: expiration_time
- Push: updated_keys
- LeanEngine: X-LC-Prod request header

## [2.1.11] - 2019-05-10
### Fixed
- Error -1 when uploading large files to Qiniu
- TypeError in py3k when uploading files to Qiniu using BytesIO / StringIO
- Upgraded urlib3 to 1.24.3 (CVE-2019-11324)
### Added
- email argument for User.login

## [2.1.10] - 2019-03-18
### Changed
- Upgrade Qiniu SDK

## [2.1.9] - 2019-03-11
### Fixed
- Fixed CookieSessionMiddleware.pre_process fail when session_token doesn't exist in Cookies
- Fixed unit test for AVFile
### Added
- LeanCloud API App Router v2 for us-w1 and cn-e1

## [2.1.8] - 2017-04-09
### Fixed
- Fixed requestSmsCode fail when sending international sms

## [2.1.7] - 2017-12-27
### Fixed
- Minor crash bug introduced by 2.1.6 fix

## [2.1.6] - 2017-12-27
### Fixed
- leancloud.File should accept any file like object

## [2.1.5] - 2017-10-27
### Fixed
- add dependency for `six`

## [2.1.4] - 2017-10-13
### Fixed
- reset_password_by_sms_code now works properly, thanks rickyfunfun<151266405@qq.com> for the patch

## [2.1.3] - 2017-09-26
### Fixed
- another unicode encoding error in python2 on CookieSessionMiddleware

## [2.1.2] - 2017-09-26
### Fixed
- unicode encoding error in python2 on CookieSessionMiddleware

## [2.1.1] - 2017-09-22
### Fixed
- unicode encoding error in python2 on leanengine

## [2.1.0] - 2017-09-21
### Added
- leancloud.Status class
- leancloud.SysMessage class
- allow query realtime message
- allow query with ACL
### Changed
- rename leancloud.cloudfunc to leancloud.cloud

## [2.0.0] - 2017-08-05
### Added
- leancloud.User.session_token property
### Fixed
- invalid timezone on leancloud.Object#created_at and leancloud.Object#updated_at
- leancloud.Query#get using get ACL permission, not find
### Removed
- leancloud.Engine#current_user (use leancloud.Engine#current.user instead)
- type_ param in leancloud.File constructor (use mime_type instead)
- type_ param in leancloud.File.create_with_url (use mime_type instead)
- leancloud.Object#fetch_when_save property (use fetch_when_save param in leancloud.Object#save function instead)
- leancloud.Object#attribute property
- leancloud.Relation#query not is a property, not a function
- leancloud.Query#does_not_exists (use leancloud.Query#does_not_exist instead)
- leancloud.Query#matched_key_in_query (use leancloud.Query#matches_key_in_query instead)

## [1.13.0] - 2017-08-04
### Added
- leancloud.Engine#wrap
- leancloud.Engine#register
- support leanengine hook key
- add fetch_user param in leancloud.Engine constructor
- support setting expires and max_age in CookieSessionMiddleware

## [1.12.0] - 2017-06-05
### Added
- Captcha related API
- Conversation related API
- support SNI in earlier python versions

## [1.11.0] - 2017-04-14
### Added
- LeanCloud API app router v2

## [1.10.0] - 2017-02-22
### Added
- leancloud.Query#size_equal_to
- leancloud.Query#scan
- allow query leancloud.File
### Fixed
- cookie session middleware typo

## [1.9.0] - 2016-12-13
### Added
- leancloud.Object#save now accept fetch_when_save as keyword parameter
- support request hooks

### Fixed
- bugfixes on CookieSessionMiddleware

## [1.8.0] - 2016-11-15
### Added
- leancloud.User#refresh_session_token()
- leancloud.User#is_authenticated()
- keep alive on LeanCloud API Server HTTP connections

## [1.7.0] - 2016-10-31
### Fixed
- leancloud.Notification now support fetch()
- allow return a nested structure of leancloud.Object in rpc call
### Added
- define cloud function with alternate function name
- support dev mode in leancloud.push.send
- leancloud.Engine#current request local variable
- session token WSGI middleware

## [1.6.5] - 2016-09-27
### Fixed
- LeanEngine on_login / on_verified bugfix

## [1.6.4] - 2016-09-26
### Fixed
- LeanEngine CORS middleware error in Python3
- missing objectId while using Object._deep_save to update an object
- allow Object.get method get objectId / createAt/ updatedAt field
### Updated
- leancloud.User#get_roles()
- rename leancloud.Engine#on_bigquery to leancloud.Engine#on_insight

## [1.6.3] - 2016-08-03
### Fixed
- deprecate leancloud.Query.does_not_exists and add leancloud.Query.does_not_exist
### Updated
- updated pyi stub files

## [1.6.2] - 2016-07-21
### Fixed
- invalid push_time format in leancloud.push.send function
### Updated
- add leancloud.Object.as_class static function

## [1.6.1] - 2016-07-08
### Added
- leancloud.User.reset_password_by_sms_code
- add default value for leancloud.Object.get
### Updated
- refactor file upload process
- clean up leancloud.Object fields (reduce memory size)
- add type interface for python3.5's type announce
- raise ValueError while pass a None value to leancloud.Query.near

## [1.6.0] - 2016-05-23
### Updated
- support python 3.5

## [1.5.1] - 2016-05-19
### Fixed
- fixed before update hook not word correctly

## [1.5.0] - 2016-05-16
### Added
- leancloud.cloudfunc.rpc
- use api host from app router
- support cos file upload

## [1.4.2] - 2016-04-26
### Fixed
- User.set_password now set the password to field `password`
### Updated
- Relation.query now is a property (not a function)
- allow `X-LC-UA` CORS header
- upload files to AWS S3 when region is US

## [1.4.1] -2016-02-24
### Added
- add leancloud.Object.disable_before_hook and leancloud.Object.disable_after_hook
- allow where param in Object.save
### Updated:
- fixed query with leancloud.Engine.current_user as param bug

## [1.4.0] - 2016-02-02
### Added
- add leancloud.File.fetch function
- add leancloud.engine.before_update hook
- add leancloud.Object.save_all and leancloud.Object.destroy_all function
- add leancloud.Object.fetch_when_save flag
- ### Updated
- bugfix for leancloud.User._session_token is set to None when modify User object
- bugfix for query leancloud.Role object

## [1.3.12] - 2015-12-30
### Updated
- fixed engine hook current user's bug
- access to leancloud.Object.attributes will raise a warning

## [1.3.11] - 2015-12-17
### Updated
- use API base URL from env

## [1.3.10] - 2015-11-30
### Added
- support min_distance param in GEO query
### Updated
- bugfix for User.request_mobile_phone_verify and User.request_password_reset_by_sms_code

## [1.3.9] - 2015-11-17
### Updated
- bugfix for leanengine on login hook

## [1.3.8] - 2015-11-13
### Updated
- allow use 'name' as parameter in leancloud.engine.cloudfunc
- update leancloud.File name generator
- bugfix for leancloud.Query.add_ascending and leancloud.Query.add_descending

## [1.3.7] - 2015-10-23
### Updated
- revert last version's leancloud.File name generator modify

## [1.3.6] - 2015-10-21
### Updated
- bugfix on leancloud.Relation operations
- bugfix on leancloud.File name generator
- now leancloud.User.login set the user to current user
- handle the engine.current_user as normal leancloud.User
- bugfix on leancloud.User.logout
### Added
- leancloud.use_master_key

## [1.3.5] - 2015-09-22
### Updated
- cache werkzeug's request object in environ

## [1.3.4] - 2015-09-18
### Updated
- fixed LeanEngine authorize bug

## [1.3.3] - 2015-09-18
### Updated
- allow init Role withoud acl
- support JS-SDK's body params

## [1.3.2] - 2015-09-17
### Updated
- support short headers

## [1.3.1] - 2015-09-02
### Added
- more function in leancloud.User
### Updated
- bugfix for push query

## [1.3.0] - 2015-08-24
### Added
- add third party login support
- fix leanengine.client.use_region bug

## [1.2.7] - 2015-08-20
### Updated
- fixed cloud hook bug

## [1.2.6] - 2015-08-18
### Updated
- bugfix for inherit leancloud.User class

## [1.2.5] - 2015-08-07
### Updated
- bugfix for FriendshipQuery
- bugfix for use masterkey

## [1.2.4] - 2015-08-04
### Updated
- bugfix for Query#matched_key_in_query

## [1.2.3] - 2015-07-28
### Updated
- bugfix for ACL#get_role_write_access
- bugfix for ACL#_get_access
- more unit test

## [1.2.2] - 2015-07-17
### Updated
- bugfix for save file to qiniu

## [1.2.1] - 2015-07-15
### Updated
- fixed Object._merge_magic_field bug
- add CORS support in cloud func

## [1.2.0] - 2015-07-14
### Updated
- add User#become method

## [1.1.1] - 2015-07-14
### Updated
- upload files to qiniu server directly
- use request sigh instead of app key
### Fixed
- fix Role class don't have underscore bug

## [1.1.0] - 2015-06-12
### Added
- LeanEngine: support bigquery hook

## [1.0.8] - 2015-04-23
### Added
- Python 2.6 support
