Change Log¶
prawcore follows semantic versioning.
3.2.1 (2026/06/10)¶
Added
Add Sphinx-based documentation, published at https://prawcore.readthedocs.io/.
Changed
Improve source docstrings and type annotations so that references render cleanly in the new documentation.
3.2.0 (2026/06/09)¶
Added
Add an
__all__to theprawcorepackage to explicitly define its public API.Add a
py.typedmarker (PEP 561) so that downstream projects can type check against prawcore’s inline annotations.Add read-only
Session.authorizer,Session.rate_limiter, andSession.requestorproperties, aBaseAuthorizer.authenticatorproperty, and aBaseAuthenticator.requestorproperty, so that downstream code can reach these objects without accessing protected attributes.
Changed
Widen the
authorizerparameter ofsession()toBaseAuthorizerto matchSession, so that passing anImplicitAuthorizerorDeviceIDAuthorizertype checks.Widen the
data,files,json, andparamsparameter annotations ofSession.request()to reflect the values it already accepts at runtime (for example a non-dictdatabody, alistjsonpayload, and anyIOfile object), so that callers no longer need to cast these arguments.
3.1.0 (2026/06/07)¶
Added
Add support for Python 3.14.
Changed
Drop support for Python 3.9, which was end-of-life on 2025-10-31.
Migrate the test suite from Betamax to VCR.py, enabling urllib3 2.x in the test environment. Existing cassettes were converted without re-recording.
3.0.2 (2025/02/10)¶
Changed
Improved type hinting.
3.0.1 (2025/01/26)¶
Fixed
Increase half-second delay introduced in
3.0.0to a full second delay.
3.0.0 (2025/01/25)¶
Changed
Drop support for Python 3.8, which was end-of-life on 2024-10-07.
RateLimiterattributenext_request_timestamphas been removed and replaced withnext_request_timestamp_ns.
Fixed
Add a half-second delay when there are no more requests in the rate limit window and the window has zero seconds remaining to avoid a semi-rare case where Reddit will return a 429 response resulting in a
TooManyRequestsexception.
Removed
Remove
RateLimiterattributereset_timestamp.
2.4.0 (2023/10/01)¶
Changed
Drop support for Python 3.6, which was end-of-life on 2021-12-23.
Updated rate limit algorithm to better handle Reddit’s new rate limits.
Drop support for Python 3.7, which was end-of-life on 2023-06-27.
2.3.0 (2021-07-26)¶
Added
301 redirects result in a
Redirectexception.Requestoris now initialized with atimeoutparameter.ScriptAuthorizer,ReadOnlyAuthorizer, andDeviceIDAuthorizerhave a new parameter,scopes, which determines the scope of access requests.Retry 408 “Request Timeout” HTTP responses.
Changed
DeviceIDAuthorizercan be now used withTrustedAuthenticator.
2.2.0 (2021-06-10)¶
Added
Support 202 “Accepted” HTTP responses.
Fixed
The expected HTTP response status code for a request made with the proper credentials to api/v1/revoke_token has been changed from 204 to 200.
2.1.0 (2021-06-07)¶
Added
Add a
URITooLongexception.ScriptAuthorizerhas a new parametertwo_factor_callbackthat supplies OTPs (One-Time Passcodes) whenScriptAuthorizer.refresh()is called.Add a
TooManyRequestsexception.
2.0.0 (2021-02-23)¶
Added
Authorizeroptionally takes apre_refresh_callbackkeyword argument. If provided, the function will called with the instance ofAuthorizerprior to refreshing the access and refresh tokens.Authorizeroptionally takes apost_refresh_callbackkeyword argument. If provided, the function will called with the instance ofAuthorizerafter refreshing the access and refresh tokens.
Changed
The
refresh_tokenargument toAuthorizermust now be passed by keyword, and cannot be passed as a positional argument.
1.5.0 (2020-08-04)¶
Changed
Drop support for Python 3.5, which was end-of-life on 2020-09-13.
1.4.0 (2020-05-28)¶
Added
When calling
Session.request(), we add the key-value pair"api_type": "json"to thejsonparameter, if it is adict.
Changed
(Non-breaking) Requests to
www.reddit.comuse theConnection: closeheader to avoid warnings when tokens are refreshed after their one-hour expiration.
1.3.0 (2020-04-23)¶
Added
All other requestor methods, most notably
Session.request(), now contain atimeoutparameter.
1.2.0 (2020-04-23)¶
Added
Requestor.request()can be given a timeout parameter to control the amount of time to wait for a request to succeed.
Changed
Updated rate limit algorithm to more intelligently rate limit when there are extra requests remaining.
Drop python 2.7 support.
1.0.1 (2019-02-05)¶
Fixed
RateLimiterwill not sleep longer thannext_request_timestamp.
1.0.0 (2018-04-26)¶
I am releasing 1.0.0 as prawcore is quite stable and it’s unlikely that any breaking changes will need to be introduced in the near future.
Added
Log debug messages for all sleep times.
0.15.0 (2018-03-31)¶
Added
SpecialErroris raised on HTTP 415.
0.14.0 (2018-02-10)¶
Added
ReadTimeoutis automatically retried like the server errors.
Changed
Drop support for Python 3.3 as it is no longer supported by requests.
0.13.0 (2017-12-16)¶
Added
UnavailableForLegalReasonsexception raised when HTTP Response 451 is encountered.
0.12.0 (2017-08-30)¶
Added
BadJSONexception for the rare cases that a response that should contain valid JSON has unparsable JSON.
0.11.0 (2017-05-27)¶
Added
Conflictexception is raised when response status 409 is returned.
0.10.1 (2017-04-10)¶
Fixed
InvalidTokenis again raised on 401 when a non-refreshable application is in use.
0.10.0 (2017-04-10)¶
Added
ConnectionErrorexceptions are automatically retried. This handlesConnection Reset by Peerissues that appear to occur somewhat frequently when running on Amazon EC2.
Changed
Calling
RateLimiternow requires a second positional argument,set_header_callback.In the event a 401 unauthorized occurs, the access token is cleared and the request is retried.
Fixed
Check if the access token is expired immediately before every authorized request,rather than just before the request flow. This new approach accounts for failure retries, and rate limiter delay.
0.9.0 (2017-03-11)¶
Added
Add
sessionparameter to Requestor to ease support of custom sessions (e.g. caching or mock ones).
0.8.0 (2017-01-29)¶
Added
Handle 413 Request entity too large responses.
reset_timestamptoRateLimiter.
Fixed
Avoid modifying passed in
dataandparamstoSession.request.
0.7.0 (2017-01-16)¶
Added
ChunkedEncodingError is automatically retried like the server errors.
0.6.0 (2016-12-24)¶
Added
Handle 500 responses.
Handle Cloudflare 520 responses.
0.5.0 (2016-12-13)¶
Added
All network requests now have a 16 second timeout by default. The environment variable
prawcore_timeout can be used to adjust the value.
0.4.0 (2016-12-09)¶
Changed
Prevent ‘(None)’ from appearing in OAuthException message.
0.3.0 (2016-11-20)¶
Added
Add
filesparameter toSession.requestto support image upload operations.Add
durationandimplicitparameters toUntrustedAuthenticator.authorization_urlso that the method also supports the code grant flow.
Fixed
Authorizerclass can be used withUntrustedAuthenticator.
0.2.1 (2016-08-07)¶
Fixed
sessionworks withDeviceIDAuthorizerandImplicitAuthorizer.
0.2.0 (2016-08-07)¶
Added
Add
ImplicitAuthorizer.
Changed
Split
AuthenticatorintoTrustedAuthenticatorandUntrustedAuthenticator.
0.1.1 (2016-08-06)¶
Added
Add
DeviceIDAuthorizerthat permits installed application access to the API.
0.1.0 (2016-08-05)¶
Added
RequestExceptionwhich wraps all exceptions that occur fromrequests.requestin aprawcore.RequestException.
Changed
What was previously
RequestExceptionis nowResponseException.
0.0.15 (2016-08-02)¶
Added
Handle Cloudflare 522 responses.
0.0.14 (2016-07-25)¶
Added
Add
ServerErrorexception for 502, 503, and 504 HTTP status codes that is only raised after three failed attempts to make the request.Add
jsonparameter toSession.request.
0.0.13 (2016-07-24)¶
Added
Automatically attempt to refresh access tokens when making a request if the access token is expired.
Fixed
Consider access tokens expired slightly earlier than allowed for to prevent InvalidToken exceptions from occuring.
0.0.12 (2016-07-17)¶
Added
Handle 0-byte HTTP 200 responses.
0.0.11 (2016-07-16)¶
Added
Add a
NotFoundexception.Support 404 “Not Found” HTTP responses.
0.0.10 (2016-07-10)¶
Added
Add a
BadRequestexception.Support 400 “Bad Request” HTTP responses.
Support 204 “No Content” HTTP responses.
0.0.9 (2016-07-09)¶
Added
Support 201 “Created” HTTP responses used in some v1 endpoints.
0.0.8 (2016-03-21)¶
Added
Sort
Session.requestdatavalues. Sorting the values permits betamax body matcher to work as expected.
0.0.7 (2016-03-18)¶
Added
Added
dataparameter toSession.request.
0.0.6 (2016-03-14)¶
Fixed
prawcore objects can be pickled.
0.0.5 (2016-03-12)¶
Added
302 redirects result in a
Redirectexception.
0.0.4 (2016-03-12)¶
Added
Add a generic
Forbiddenexception for 403 responses without thewww-authenticateheader.
0.0.3 (2016-02-29)¶
Added
Added
paramsparameter toSession.request.Log requests to the
prawcorelogger in debug mode.
0.0.2 (2016-02-21)¶
Fixed
README.rst for display purposes on pypi.
0.0.1 (2016-02-17) [YANKED]¶
Added
Dynamic rate limiting based on reddit’s response headers.
Authorization URL generation.
Retrieval of access and refresh tokens from authorization grants.
Access and refresh token revocation.
Retrieval of read-only access tokens.
Retrieval of script-app tokens.
Three examples in the
examples/directory.