- 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.
- [CHANGE] All requests should now be through HTTPS.
- [CHANGE] All previously deprecated methods have been removed.
- [CHANGE] The display_name attribute on instances of:class: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.
- [FEATURE] Added get_message() to fetch a single Message object by its ID.
- [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.
- [BUGFIX] Fix assertion error in replace_more_comments() with continue this thread links that have more than one child.
- [BUGFIX] refresh() on praw.objects.Submission no longer loses comment sort order and other manually specified parameters.
- [REDDIT] Add hide_ads as a parameter to set_settings().
- [REDDIT] create_redditor() no longer requires a captcha
- [REDDIT] create_subreddit() may require a captcha
- [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.
- [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.
- [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”.
- [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.
- [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().
- [CHANGE] Increase the dependency of six to 1.4 or later.
- [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.
- [FEATURE] Added ignore_reports() and unignore_reports() to Comment and Submission.
- [BUGFIX] The history scope is not required for get_comments(), get_overview() and get_submitted() despite the official reddit documentation saying so. Redditors may choose to make their voting record public, in which case no authentication is required for get_disliked() or get_liked(). The history scope requirement for the above-mentioned methods has been removed.
- [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.
- [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).
- [FEATURE] Add methods set_contest_mode() and unset_contest_mode() to Submission, for (un)setting of contest modes. See this Reddit post for information about contest mode.
- [FEATURE] Move methods get_liked() and get_liked() to Redditor from LoggedInRedditor. Redditors can make their likes and dislikes public. Having get_liked() and get_liked() on Redditor allows PRAW to access this info.
- [FEATURE] The has_fetched attribute has been added to all objects save Reddit, see the lazy loading page in PRAW’s documentation for more details.
- [BUGFIX] Fixed a bug that caused the timeout configuration setting to always be the default 45 irrespective of what it was set to in praw.ini.
- [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.
- [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.
- [FEATURE] get_mod_mail() can now be used to get moderator mail from individual subreddits, instead of all moderated subreddits, just like get_mod_queue().
- [FEATURE] Added get_mentions() which is a get_content() generator for username mentions. Only usable if the authenticated user has gold.
- [BUGFIX] Fixed an error in get_mod_queue(), get_reports(), get_spam() and get_unmoderated() when calling them from Reddit without giving the subreddit argument explicitly.
- [REDDIT] New fields public_traffic added to set_settings() as per the upstream change.
- [FEATURE] Added UnauthenticatedReddit.get_random_submission().
- [BUGFIX] Verify that sys.stdin has closed attribute before checking if the stream is closed.
- [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.
- [FEATURE] PRAW now supports proper rate-limiting and shared caching when running multiple processes. See Concurrent PRAW Instances for usage information.
- [CHANGE] Remove explicit limit parameters from functions that utilize get_content() but don’t alter the limit. This change will result in broken code if the calling code utilizes positional instead of keyword arguments.
- [CHANGE] get_flair() returns None when the redditor does not exist.
- [CHANGE] Deprecated get_all_comments(). Use get_comments() with all as the subreddit argument.
- [CHANGE] Deprecated get_my_reddits(). Use get_my_subreddits() instead.
- [CHANGE] Deprecated get_popular_reddits(). Use get_popular_subreddits() instead.
- [BUGFIX] Allow editing non-top-level wiki pages fetched using Subreddit.get_wiki_page().
- [BUGFIX] Fix a bug in submit(). See https://github.com/praw-dev/praw/issues/213.
- [BUGFIX] Fix a python 3.3 bug in upload_image(). See https://github.com/praw-dev/praw/issues/211.
- [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.
- [FEATURE] Added get_submissions() to batch convert fullnames (t3_bas36id) into Submission objects.
- [FEATURE] Added get_wiki_banned() to get a list of wiki banned users.
- [FEATURE] Added add_wiki_ban() and remove_wiki_ban() to manage the list of wiki banned users.
- [FEATURE] Added get_wiki_contributors() to get a list of wiki contributors.
- [FEATURE] Added add_wiki_contributor() and remove_wiki_contributor() to manage the list of wiki contributors.
- [FEATURE] Added get_wiki_page() to fetch an individual WikiPage.
- [FEATURE] Added get_wiki_pages() to get a list of WikiPage objects.
- [FEATURE] Wiki pages can be edited through either the WikiPage.edit() method of an already existing WikiPage object, or through the edit_wiki_page() function. edit_wiki_page() is also used to create new wiki pages.
- [CHANGE] Deprecated ban(), unban(), make_contributor(), and make_moderator() in favor of the consistently named add_ban(), remove_ban(), add_contributor(), and add_moderator() respectively.
- [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.
- [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.
- [FEATURE] Add parameter update_user (default False) to get_unread() if it and unset_has_mail are both True, then the user object in the Reddit object will have its has_mail attribute set to False.
- [FEATURE] Add get_friends() and get_blocked() to LoggedInRedditor.
- [FEATURE] Add the read scope to get_all_comments() in the Reddit object.
- [FEATURE] Add the read scope to get_comments() and the subreddit listings such as get_new() in the Reddit() and Subreddit() object.
- [BUGFIX] Fix bug in MoreComments.comments().
- [CHANGE] Break get_friends() and get_banned() until there is an upstream fix to mean that does not require ssl for those endpoints.
- [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.
- [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.
- [BUGFIX] Fix python 3 failure within the test suite introduced in 2.0.3.
- [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:
- [CHANGE] Move the following methods from LoggedInRedditor to base reddit object.
- [FEATURE] Add support for /r/random.
- [FEATURE] Extended functionality to Python 3.3.
- [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.
- [FEATURE] Support for optional ‘prev’ values added.
- [FEATURE] Allow for the OS to not be identified when searching for praw.ini.
- [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.
- [REDDIT] New fields prev_description_id and prev_public_description_id added to set_settings() as per the upstream change.
- [REDDIT] The logged in / moderator checks for flair_list in Reddit are no longer needed and have been removed.
- [FEATURE] require_moderator decorator now supports multi-reddits.
- [FEATURE] Rudimentary logging of the http requests have been implemented.