The changes listed below are divided into four categories:

  • [BUGFIX] Something was broken before, but is now fixed.
  • [CHANGE] Other changes affecting user programs, such as the renaming of a function.
  • [FEATURE] Something new has been added.
  • [REDDIT] A change caused by an upstream change from reddit.

Read /r/changelog to be notified of upstream changes.


PRAW 3.3.0

  • [BUGFIX] Fixed login password prompt issue on windows (#485).
  • [BUGFIX] Fixed unicode user-agent issue (#483).
  • [BUGFIX] Fix duplicate request issue with comment and submission streams (#501).
  • [BUGFIX] Stopped praw.objects.Redditor.friend() from raising LoginRequired when using OAuth.
  • [BUGFIX] Stopped a json-parsing error from occuring in cases where reddit’s response to a request was an empty string. request_json() will now simply return that empty string.
  • [BUGFIX] Fix AssertionError when hiding and unhiding under OAuth, raised by stacked scope decorators.
  • [BUGFIX] Fix AttributeError when hiding and unhiding under OAuth without the “identity” scope, raised when PRAW tried to evict the user’s /hidden page from the cache.
  • [CHANGE] Added messages to all PRAW exceptions (#491).
  • [CHANGE] Made it easier to send JSON dumps instead of form-encoded data for http requests. Some api-v1 endpoints require the request body to be in the json format.
  • [CHANGE] Moved and deprecated praw.objects.LoggedInRedditor.get_friends() to praw.AuthenticatedReddit, leaving a pointer in its place. Previously, get_friends was difficult to access because the only instance of LoggedInRedditor was the reddit session’s user attribute, which is only instantiated if the user has the “identity” scope. By moving get_friends to the reddit session, it can be used without having to manipulate a praw.objects.Redditor intsance’s class.
  • [CHANGE] Removed support for Python 2.6 and Python 3.2 (#532).
  • [FEATURE] Added support for adding “notes” to your friends. Users with reddit Gold can set the note parameter of praw.objects.Redditor.friend(). 300 character max enforced by reddit.
  • [FEATURE] New praw.objects.Redditor.get_friend_info() to see info about one of your friends. Includes their name, ID, when you added them, and if you have reddit Gold, your note about them.

PRAW 3.2.1

  • [BUGFIX] Fixed “multiple values for argument” error when solving captchas.

PRAW 3.2.0

  • [BUGFIX] Fixed methods which require more than one OAuth scope.
  • [BUGFIX] Fixed praw.objects.WikiPage.remove_editor() raising AssertionError when used through OAuth.
  • [BUGFIX] Fixed get_wiki_page() not sending the OAuth headers.
  • [CHANGE] praw.objects.Refreshable.refresh() will now always return a fresh object. Previously, Subreddits and Redditors would use cache content when available.
  • [CHANGE] praw.objects.WikiPage is now refreshable, and will lazy-load.
  • [FEATURE] Added methods leave_moderator() and leave_contributor() to praw.__init__.AuthenticatedReddit and praw.objects.Subreddit.
  • [FEATURE] Added support for double stickies. Use boolean parameter bottom to choose which sticky to set or get.
  • [FEATURE] Added methods praw.objects.Message.collapse() and praw.objects.Message.uncollapse().
  • [FEATURE] If an OAuth2 refresh token is available, and PRAW encounters an “Invalid Token” error, it will attempt to refresh the token for you automatically.
  • [REDDIT] Fixed case where the user could not reply to private messages with the privatemessages scope because the endpoint required the submit scope. reddit has fixed this quirk, and PRAW now chooses the proper scope.

PRAW 3.1.0

  • [BUGFIX] Fixed method get_random_submission which failed to raise the expected redirect exception.
  • [CHANGE] Replaced instances of “liked” and “disliked” with “upvoted” and “downvoted”. The get_liked and get_disliked methods in objects.Redditor still exist, but point to the new methods.
  • [CHANGE] Fixed the subreddits attribute of praw.objects.Multireddit being returned as a list of dicts. It is now a list of Subreddit objects.
  • [CHANGE] The display_name attr of objects.Subreddit and the name attr of objects.Redditor are now set when instantiated, and do not lazyload. To guarantee that these strings are properly cased, the user must instantiate the object with fetch=True, or call object.refresh().
  • [FEATURE] Added get_comment_replies() and get_post_replies() to the praw.__init__.PrivateMessagesMixin

PRAW 3.0.0

  • [CHANGE] All requests should now be through HTTPS.
  • [CHANGE] All exceptions should be in the PRAW namespace. In particular, there should be no more exceptions under the requests namespace.
  • [CHANGE] All previously deprecated methods have been removed.
  • [CHANGE] The display_name attribute on instances of Subreddit is now lazily loaded and will match the casing on the site, not the casing used to construct the Subreddit instance. To quickly fetch the name of an unloaded Subreddit, use str(sub_instance), or unicode(sub_instance).
  • [CHANGE] Removed praw.Config instance attribute is_reddit.
  • [CHANGE] evict() now returns the number of items evicted.
  • [CHANGE] Removed praw.ini parameter decode_html_entities. Entities, e.g., &, < >, are now always decoded.
  • [FEATURE] Added get_message() to fetch a single Message object by its ID.
  • [FEATURE] Added get_sticky() to get a Subreddit’s sticky post.
  • [FEATURE] Refresh tokens can be specified in praw.ini via oauth_refresh_token.
  • [FEATURE] Added create_multireddit() to create a new Multireddit.
  • [FEATURE] Added copy_multireddit() to copy a Multireddit.
  • [FEATURE] Added edit_multireddit() to edit an existing Multireddit.
  • [FEATURE] Added get_multireddits() to get a list of Multireddits belonging to the requested user.
  • [FEATURE] Added rename_multireddit() to rename an existing Multireddit.
  • [FEATURE] Added set_suggested_sort() to change a submission’s sort order.
  • [FEATURE] Added method as optional parameter to request_json(), so that a request method other than ‘POST’ can be specified.
  • [FEATURE] Added praw.__init__.ReportMixin.hide() and praw.__init__.ReportMixin.unhide(), which accept up to 50 fullnames to be hidden at one time. The appropriate methods in objects.Hideable now point here instead.
  • [FEATURE] Added add_editor(), remove_editor(), get_settings() and edit_settings() to WikiPage for managing editors and permission levels of individual wiki pages.
  • [REDDIT] Removed send_feedback as it is no longer supported by reddit.
  • [REDDIT] Added DeprecationWarning to login() as reddit will stop supporting cookie-based authentication on 2015/08/03.

PRAW 2.1.21

PRAW 2.1.20

  • [BUGFIX] Attempting to lazyload an attribute of a comment that has been removed will explicitly raise a praw.errors.InvalidComment() exception, rather than an IndexError (issue #339).
  • [BUGFIX] replace_more_comments() handles continue this thread type MoreComments objects.
  • [FEATURE] Added praw.helpers.valid_redditors().
  • [FEATURE] Added a nsfw parameter to get_random_subreddit() that permits fetching a random NSFW Subreddit. This change also supports fetching these subreddits via get_subreddit('randnsfw').
  • [FEATURE] Added a from_sr parameter to send_message() to send the private message from a subreddit you moderate (Like the “From” dropdown box when composing a message).
  • [FEATURE] Added Multireddit
  • [FEATURE] Added get_multireddit() to get a single multireddit obj
  • [FEATURE] Added get_my_multireddits() to get all multireddits owned by the logged in user.
  • [FEATURE] Added get_multireddit() to Redditor to quickly get a multireddit belonging to that user.
  • [FEATURE] praw.objects.Comment, praw.objects.Redditor, and praw.objects.Submission are now gildable.
  • [FEATURE] praw.objects.Comment is now saveable.
  • [REDDIT] Handle upstream change in reddit’s OAuth2 scope parsing.

PRAW 2.1.19

  • [BUGFIX] Support URLs in search().
  • [BUGFIX] Fix bug where json_dict was set to None when it should not have been.
  • [BUGFIX] Fix get_subreddit_recommendations() to work with the updated API route.
  • [BUGFIX] Track time between requests using timeit.default_timer.
  • [CHANGE] get_friends() and get_banned() once again work.
  • [CHANGE] is_root() no longer requires fetching submission objects.
  • [REDDIT] Support thing_id lists in get_info().
  • [FEATURE] Support providing HTTPS proxies, that is, proxies specific to handling HTTPS requests.
  • [FEATURE] get_liked() and get_disliked() now accept additional arguments, e.g., limit.
  • [FEATURE] Add get_messages() for specifically retreiving messages (not replies).
  • [REDDIT] Add collapse_deleted_comments as a parameter to set_settings().
  • [REDDIT] get_stylesheet() now supports using the modconfg OAuth scope.
  • [REDDIT] get_stylesheet() no longer accepts the prevstyle argument.

PRAW 2.1.18

  • [FEATURE] Add the get_flair_choices() method to the Submission class, which returns the choices for user flair in the subreddit and the current flair of the authenticated user.
  • [FEATURE] Add the get_flair_choices() method to the Submission class, which returns the choices for link flair on this submission as well as it’s current flair.
  • [BUGFIX] Fix python3 issue with func_defaults.
  • [REDDIT] Avoid exceptions caused by upstream changes by reddit with respect to conflicts between json attributes and RedditContentObject properties. In such cases, the attribute from reddit will be suffixed with “_reddit”.

PRAW 2.1.17

  • [BUGFIX] Remove the built-in score property from comments as reddit provides that attribute as of 2014/06/18.
  • [FEATURE] submit() now supports a resubmit argument to allow the submission of an already submitted url.

PRAW 2.1.16

  • [BUGFIX] Fix incorrect username when building Redditor objects from wikipage submissions.
  • [CHANGE] Increase the dependency of update_checker to 0.10 or later to prevent ImportWarnings (issue 291).
  • [CHANGE] get_banned() now takes a user_only argument (default: True). When the value is explicitly passed as False the return value is not a generator of Redditor objects, but a generator of dictionaries whose name key corresponds to the Redditor object and whose ban-note is at key note.
  • [FEATURE] Enable gathering of duplicate submissions for a Submission object (issue 290).
  • [FEATURE] Add praw.__init__.AuthenticatedReddit.delete().

PRAW 2.1.15

  • [FEATURE] Add save OAuth scope to save() and unsave().
  • [BUGFIX] Fix Google AppEngine bug with platform.platform.
  • [REDDIT] Using get_flair() now requires moderator access. See this /r/redditdev thread
  • [CHANGE] Increase the dependency of update_checker to 0.9 or later.

PRAW 2.1.14

  • [CHANGE] Increase the dependency of six to 1.4 or later.

PRAW 2.1.13

  • [FEATURE] Support building wheel binary distributions.
  • [FEATURE] get_submission() and from_url() now supports url parameters. Both included within the url and explicitly via the “params” argument.
  • [CHANGE] The dependency on update_checker has been increased to >= 0.8.
  • [REDDIT] Add support for changes to UserLists on reddit.
  • [REDDIT] Using get_flair_list now requires moderator access. See this /r/redditdev thread
  • [BUGFIX] Fix configuration parsing for store_json_result.
  • [BUGFIX] Fix duplicate bug in BoundedSet.

PRAW 2.1.12

  • [FEATURE] Add json_dict to RedditContentObject.
  • [FEATURE] You can now give configuration settings directly when instantiating a BaseReddit object. See the configuration files
  • [BUGFIX] Fixed a bug that caused an AttributeError to be raised when using a deprecated method.

PRAW 2.1.11

PRAW 2.1.10

PRAW 2.1.9

  • [FEATURE] mark_as_nsfw() and unmark_as_nsfw() can now be used if the currently authenticated user is the author of the Submission.
  • [FEATURE] get_contributors() can now be used for accessing the contributor list of protected/private subreddits without requiring moderator access. See issue issue 246.
  • [BUGFIX] Fixed Comment erroneously having the methods mark_as_nsfw and unmark_as_nsfw, despite comments not being able to be marked as NSFW.
  • [REDDIT] Update get_subreddit_recommendations() to handle changed returned data format.

PRAW 2.1.8

  • [FEATURE] Add get_subreddit_recommendations() to get a recommendation of subreddits based on a list of provided subreddits.
  • [FEATURE] Subreddit now has an __repr__ method. So it’s now possible to identify what subreddit the object represents from the human readable representation of the object.
  • [FEATURE] Add praw.__init__.UnauthenticatedReddit.get_rising() that returns the rising listing of the front page in the context of the currently logged-in user (if any).

PRAW 2.1.7

PRAW 2.1.6

  • [BUGFIX] PRAW automatically retries failed requests to reddit if the error is likely to be a temporary one. This resulted in spamming reddit if the error occurred after content had been saved to reddit’s database. Therefore the following methods will no longer retry failed request upload_image(), send_message(), submit(), send_feedback(), reply() and add_comment(). Additionally request_json() now has the retry_on_error argument, which if set to True will prevent retries of the request if it fails.

PRAW 2.1.5

  • [FEATURE] select_flair() method added, can be used to change your flair without moderator access on subreddits that allow it.
  • [FEATURE] Add sticky() and unsticky() to sticky and unsticky a submission to the top of a subreddit.
  • [FEATURE] Add arguments syntax and period to search().
  • [FEATURE] PRAW will now try to use the http_proxy environment variable for proxy settings, if no proxy is set in the configuration file.
  • [BUGFIX] get_stylesheet() erroneously required moderator access. It now just requires that the authenticated user has access to the subreddit.
  • [BUGFIX] Fix bug that prevented the usage of search() when called from Subreddit.

PRAW 2.1.4

PRAW 2.1.3

PRAW 2.1.2

PRAW 2.1.1

  • [FEATURE] Added praw.helpers.comment_stream() to provide a neverending stream of new comments.
  • [BUGFIX] Don’t cache requests whose responses will result in an exception. This bug was introduced in version 2.1.0.

PRAW 2.1.0

PRAW 2.0.15

  • [FEATURE] PRAW can now use a proxy server, see #206. The parameter http_proxy (optional) has been added to the configuration file to define a proxy server in the form host:ip or http://login:user@host:ip.

PRAW 2.0.14

  • [BUGFIX] Prevent potential invalid redirect exception when using get_wiki_page().

PRAW 2.0.13

PRAW 2.0.12

  • [FEATURE] PRAW can now decode HTML entities, see #186. The parameter decode_html_entities (default False) has been added to the configuration file to control whether this feature is activated.
  • [FEATURE] Add InvalidSubreddit exception which is raised when attempting to get a listing for a nonexistent subreddit.
  • [FEATURE] All functions that use the get_content() generator function now take *args, **kwargs.
  • [BUGFIX] Requesting user specific data such as get_unread() while OAuthenticated as a user, then switching OAuthentication to another user and re-requesting the data within cache_timeout would return the cached results matching the previously authenticated user.
  • [BUGFIX] friend() and unfriend() used to raise an AttributeError when called without user/pswd authentication. It now properly raises LoginRequired.

PRAW 2.0.11

  • [FEATURE] Add the raise_captcha_exception argument to RequireCaptcha decorator. When raise_captcha_exception is True (default False), PRAW wil not prompt for the captcha information but instead raise a InvalidCaptcha exception.
  • [REDDIT] An upstream change has split new and rising into their own independent listings. Use the new praw.objects.Subreddit.get_rising() method instead of the old get_new_by_rising() and get_new() instead of get_new_by_date().
  • [CHANGE] The dependency on update_checker has been increased from >= 0.4 to >= 0.5.
  • [BUGFIX] After inviting a moderator invite, the cached set of moderated subreddits would not be updated with the new subreddit. Causing restrict_access() to prevent performing moderater actions in the subreddit.

PRAW 2.0.10

PRAW 2.0.9

PRAW 2.0.8

  • [FEATURE] Add unset_has_mail parameter to get_unread(), if it’s set to True, then it will set has_mail for the logged-in user to False.

PRAW 2.0.7

  • [REDDIT] A reddit update broke PRAW’s ability to use login() if it was authenticated as a logged-in user. This update adds the ability to re-login.
  • [CHANGE] get_flair_list() can now be used when logged-in as a regular user, being logged in as a mod of the subreddit is no longer required.

PRAW 2.0.6

  • [FEATURE] Add the get_unmoderated() method to Subreddit and base reddit objects. This returns a listings of submissions that haven’t been approved/removed by a moderator.

PRAW 2.0.5

  • [FEATURE] Add the parameter gilded_only to get_comments() and get_all_comments() methods in Subreddit and base reddit objects. If gilded_only is set to True, then only gilded comments will be returned.
  • [FEATURE] Add get_comments() method to Reddit object. It works like get_comments() in Subreddit objects except it takes the subreddit as the first argument.

PRAW 2.0.4

  • [BUGFIX] Fix python 3 failure within the test suite introduced in 2.0.3.

PRAW 2.0.3

  • [FEATURE] Add delete_image() method to Subreddit objects (also callable on the base reddit object with the subreddit as the first argument).
  • [CHANGE] PRAW now requires version 0.4 of update_checker.

PRAW 2.0.2

  • [BUGFIX] Fixed bug when comparing MoreComments classes in Python 3.x.

PRAW 2.0.1

PRAW 2.0.0

  • [FEATURE] Support reddit OAuth2 scopes (passwordless authentication). See PRAW and OAuth for usage information.
  • [FEATURE] Maximize the number of items fetched when explicit limits are set thus reducing the number of requests up to 4x in some cases.
  • [FEATURE] Add the following API methods to Subreddit objects (also callable on the base reddit object with the subreddit as the first argument):
  • [FEATURE] Support ‘admin’ and special distinguishing of items via distinguish().
  • [FEATURE] Ability to specify max-character limit for object-to-string representations via output_chars_limit in praw.ini.
  • [CHANGE] Remove comments_flat property of Submission objects. The new praw.helpers.flatten_tree() can be used to flatten comment trees.
  • [CHANGE] Remove all_comments and all_comments_flat properties of Submission objects. The now public method replace_more_comments() must now be explicitly called to replace instances of MoreComments within the comment tree.
  • [CHANGE] The content_id attribute of RedditContentObject has been renamed to fullname.
  • [CHANGE] The info base Reddit instance method has been renamed to get_info().
  • [CHANGE] get_saved_links has been renamed to get_saved() and moved to the LoggedInRedditor (r.user) namespace.
  • [CHANGE] The Subreddit get_info method has been renamed to from_url() and supports parameters for changing the number of comments to fetch and by what sort method.
  • [CHANGE] The get_submission() method also now supports parameters for changing the number of comments to fetch and by what sort method.
  • [CHANGE] mark_as_nsfw() and unmark_as_nsfw() can no longer be used on Subreddit objects. Use update_settings(nsfw=True) instead.
  • [CHANGE] Remove depreciated method compose_message.
  • [CHANGE] Refactored and add a number of exception classes (docs, source) This includes the renaming of:
  • [CHANGE] Simplify content-limit handling and remove the following no-longer necessary parameters from praw.ini:
    • comment_limit
    • comment_sort
    • default_content_limit
    • gold_comments_max
    • more_comments_max
    • regular_comments_max
  • [CHANGE] Move the following methods from LoggedInRedditor to base reddit object.

PRAW 1.0.16

  • [FEATURE] Add support for /r/random.

PRAW 1.0.15

PRAW 1.0.14

  • [FEATURE] Extended functionality to Python 3.3.

PRAW 1.0.13

  • [BUGFIX] Fixed non-equality bug. Before comparing two PRAW objects with != would always return True.
  • [FEATURE] Added the function my_contributions to LoggedInRedditor. Use this to find the subreddits where the user is an approved contributor.
  • [CHANGE] Voting on something will now force the next call to get_liked() or get_disliked() to re-query from the reddit rather than use the cache.

PRAW 1.0.12

  • [FEATURE] Support for optional ‘prev’ values added.

PRAW 1.0.11

PRAW 1.0.10

  • [FEATURE] Allow for the OS to not be identified when searching for praw.ini.

PRAW 1.0.9

PRAW 1.0.8

  • [CHANGE] Printing a Submission to sys.stdout will now limit the output length to 80 chars, just like Comment does.
  • [FEATURE] The maximum amount of comments that can be retrieved alongside a submission for gold and regular accounts has been exported to praw.ini.
  • [REDDIT] Checks for login/moderator in get_moderators() and get_flair() for Subreddit are no longer necessary.
  • [FEATURE] Added the function refresh() to Submission, Subreddit and Redditor. This will make PRAW re-query either reddit or the cache, depending on whether the last call was within cache_timeout, for the latest values and update the objects values.
  • [FEATURE] Added functions get_liked(), get_disliked() and get_hidden() to LoggedInRedditor to allow you to get the Things the user has upvoted, downvoted or hidden.
  • [BUGFIX] Temporary bugfix until prevstyles become optional.
  • [FEATURE] Added prevstyle to set_stylesheet requests.
  • [BUGFIX] Putting in user or pswd to praw.ini without values will no longer make it impossible to login.
  • [FEATURE] You can now have just user filled out in praw.ini to ease login while remaining safe.

PRAW 1.0.7

  • [REDDIT] New fields prev_description_id and prev_public_description_id added to set_settings() as per the upstream change.

PRAW 1.0.6

PRAW 1.0.5

  • [FEATURE] get_popular_reddits() added to Reddit.

PRAW 1.0.4

PRAW 1.0.3

  • [REDDIT] The logged in / moderator checks for flair_list in Reddit are no longer needed and have been removed.

PRAW 1.0.2

  • [FEATURE] score property wrapped function have been added to Comment.

PRAW 1.0.1

  • [FEATURE] require_moderator decorator now supports multi-reddits.
  • [FEATURE] Rudimentary logging of the http requests have been implemented.

PRAW 1.0.0