Skip to content

Latest commit

 

History

History
1154 lines (899 loc) · 47.5 KB

CHANGES.rst

File metadata and controls

1154 lines (899 loc) · 47.5 KB

Change Log

PRAW follows semantic versioning.

Unreleased

Added

  • ~.SubredditLinkFlairTemplates.reorder to reorder a subreddit's link flair templates.
  • ~.SubredditRedditorFlairTemplates.reorder to reorder a subreddit's redditor flair templates.
  • .stream_generator now accepts the continue_after_id parameter, which starts the stream after a given item ID.
  • Support for new share URL format created from Reddit's mobile apps.

Fixed

  • An issue where submitting a post with media would fail due to an API change.

Changed

  • Drop support for Python 3.7, which is end-of-life on 2023-06-27.

7.7.1 (2023/07/11)

Fixed

  • An issue with replying to a modmail conversation results in a error.

7.7.0 (2023/02/25)

Added

  • .delete_mobile_banner to delete mobile banners.
  • .upload_mobile_banner to upload mobile banners.
  • Experimental ~.Submission._edit_experimental for adding new inline media or editing a submission that has inline media.

    Danger

    This method is experimental. It is reliant on undocumented API endpoints and may result in existing inline media not displaying correctly and/or creating a malformed body. Use at your own risk. This method may be removed in the future without warning.

    This method is identical to .Submission.edit except for the following:

    • The ability to add inline media to existing posts.
    • Additional preserve_inline_media keyword argument to allow PRAW to attempt to preserve the existing inline media when editing a post. This is an experimental fix for an issue that occurs when editing a post with inline media would cause the media to lose their inline appearance.

Fixed

  • An issue with iterating .ModNote when a user has more than a hundred notes.
  • Removal reasons are now returned in the same order as they appear on Reddit.

7.6.1 (2022/11/11)

Changed

  • Revert ~.Comment.edit positional argument deprecation.
  • Revert ~.Comment.reply positional argument deprecation.
  • Revert ~.Message.reply positional argument deprecation.
  • Revert ~.Submission.edit positional argument deprecation.
  • Revert ~.Submission.reply positional argument deprecation.

Fixed

  • An issue where .ModmailConversation's messages attribute would only contain the latest message.

7.6.0 (2022/05/10)

Added

  • .pin to manage pinned submissions on the authenticated user's profile.
  • .update_display_layout to update the display layout of posts in a .Collection.
  • .SubredditCollectionsModeration.create keyword argument display_layout for specifying a display layout when creating a .Collection.
  • ~.Message.parent to get the parent of a .Message.
  • .ModNote to represent a moderator note.
  • .ModNote.delete to delete a single moderator note.
  • .RedditModNotes to interact with moderator notes from a .Reddit instance. This provides the ability to create and fetch notes for one or more redditors from one or more subreddits.
  • .RedditorModNotes to interact with moderator notes from a .Redditor instance.
  • .RedditorModNotes.subreddits to obtain moderator notes from multiple subreddits for a single redditor.
  • .SubredditModNotes to interact with moderator notes from a .Subreddit instance.
  • .SubredditModNotes.redditors to obtain moderator notes for multiple redditors from a single subreddit.
  • ~.BaseModNotes.create to create a moderator note.
  • .Redditor.notes to interact with .RedditorModNotes.
  • .SubredditModeration.notes to interact with .SubredditModNotes.
  • ~.ModNoteMixin.create_note create a moderator note from a .Comment or .Submission.
  • ~.ModNoteMixin.author_notes to view the moderator notes for the author of a .Comment or .Submission.

Changed

  • Drop support for Python 3.6, which is end-of-life on 2021-12-23.
  • .conversations now returns a .ListingGenerator allowing you to page through more than 100 conversations.

Deprecated

  • The after argument for .conversations will now have to be included in params keyword argument.
  • Positional keyword arguments for applicable functions and methods. Starting with PRAW 8, most functions and methods will no longer support positional arguments. It will encourage more explicit argument passing, enable arguments to be sorted alphabetically, and prevent breaking changes when adding new arguments to existing methods.

7.5.0 (2021/11/13)

Added

  • Log a warning if a submission's comment_sort attribute is updated after the submission has already been fetched and a warn_comment_sort config setting to turn off the warning.
  • .user_selectable to get available subreddit link flairs.
  • Automatic RateLimit handling will support errors with millisecond resolution.

Fixed

  • An import error when using PRAW in environments where libsqlite3-dev is needed to utilize the sqlite3 builtin.
  • Fixed bug where some keyword arguments that are passed to .Draft.submit would not have an effect.

7.4.0 (2021/07/30)

Added

  • ~.WikiPage.discussions to obtain site-wide link submissions that link to the WikiPage.
  • .revert to revert a WikiPage to a specified revision.
  • .Inbox.mark_all_read to mark all messages as read with one API call.
  • ~.InboxableMixin.unblock_subreddit to unblock a subreddit.
  • .update_crowd_control_level to update the crowd control level of a post.
  • .moderator_subreddits, which returns information about the subreddits that the authenticated user moderates, has been restored.
  • The configuration setting refresh_token has been added back. See https://www.reddit.com/r/redditdev/comments/olk5e6/followup_oauth2_api_changes_regarding_refresh/ for more info.
  • .Draft to represent a submission draft.
  • .Draft.delete to delete drafts.
  • .Draft.submit to submit drafts.
  • .Draft.update to modify drafts.
  • .DraftHelper to fetch or create drafts on new Reddit.
  • .DraftList to represent a list of .Draft objects.

Changed

  • .Reddit.delete now accepts the params parameter.

Deprecated

  • .Reddit keyword argument token_manager.

7.3.0 (2021/06/17)

Added

  • .UserSubreddit for the subreddit attribute of .Redditor.
  • .username_available checks if a username is available.
  • .trusted to retrieve a .RedditorList of trusted users.
  • .trust to add a user to the trusted list.
  • .distrust to remove a user from the trusted list.
  • .SQLiteTokenManager (may not work on Windows).

Changed

  • .moderated will now objectify all data returned from the API.
  • The wiki_edit endpoint has been changed from r/{subreddit}/api/wiki/edit/ to r/{subreddit}/api/wiki/edit.
  • .Redditor.block no longer needs to retrieve a user's fullname.

Deprecated

Fixed

  • Fixed bug where .WikiPage.edit and .SubredditWiki.create would fail if passed content and reason parameters that produced a request with a body greater than 500 KiB, even when the parameters did not exceed their respective permitted maximum lengths.
  • Fixed bug where .request could not handle instances of BadRequests when the JSON data contained only the keys "reason" and "message".
  • Fixed bug where .request could not handle instances of BadRequests when the response did not contain valid JSON data.
  • Fixed bug where ~.FullnameMixin.fullname sometimes returned the wrong fullname.

7.2.0 (2021/02/24)

Added

  • .Reddit keyword argument token_manager.
  • .FileTokenManager and its parent abstract class .BaseTokenManager.

Deprecated

  • The configuration setting refresh_token is deprecated and its use will result in a :pyDeprecationWarning. This deprecation applies in all ways of setting configuration values, i.e., via praw.ini, as a keyword argument when initializing an instance of .Reddit, and via the PRAW_REFRESH_TOKEN environment variable. To be prepared for PRAW 8, use the new .Reddit keyword argument token_manager. See refresh_token in PRAW's documentation for an example.
  • .me will no longer return None when called in .read_only mode starting in PRAW 8. A :pyDeprecationWarning will be issued. To switch forward to the PRAW 8 behavior set praw8_raise_exception_on_me=True in your .Reddit call.

7.1.4 (2021/02/07)

Fixed

  • Asynchronous check will no longer fail in Python 3.6 multithreading edge cases.

7.1.3 (2021/02/05)

Changed

  • Asynchronous check will no longer occur when in a Jupyter notebook.

7.1.2 (2021/02/03)

Fixed

  • Asynchronous check would not work on Python 3.6 as :py~asyncio.get_running_loop only exists on Python 3.7+.

7.1.1 (2021/02/02)

Added

  • Add method .Subreddits.premium to reflect the naming change in Reddit's API.
  • Ability to submit image galleries with ~.Subreddit.submit_gallery.
  • Ability to pass a gallery url to .Reddit.submission.
  • Ability to specify modmail mute duration.
  • Add method .invited to get invited moderators of a subreddit.
  • Ability to submit text/self posts with inline media.
  • Add method .Submission.award and .Comment.award with the ability to specify type of award, anonymity, and message when awarding a submission or comment.
  • Ability to specify subreddits by name using the subreddits parameter in .Reddit.info.
  • A check to see if PRAW is running in an asynchronous environment and will advise the user to use Async PRAW. This also adds a configuration option to disable the check.

Changed

  • Drop support for Python 3.5, which is end-of-life on 2020-09-13.
  • .BoundedSet will now utilize a Last-Recently-Used (LRU) storing mechanism, which will change the order in which elements are removed from the set.
  • Improved ~.Subreddit.submit_image and ~.Subreddit.submit_video performance in slow network environments by removing a race condition when establishing a websocket connection.

Deprecated

  • .Subreddits.gold is superseded by .Subreddits.premium.
  • .Submission.gild is superseded by .Submission.award.
  • .Comment.gild is superseded by .Comment.award.

Fixed

  • An issue where leaving as a moderator fails if you are using token auth.
  • An issue where an incorrect error was being raised due to invalid submission urls.
  • Some cases where streams yield the same item multiple times. This cannot be prevented in every case.

7.1.0 (2020/06/22)

Added

  • .Rule to represent one rule of a subreddit.
  • .SubredditRules to get and add rules.
  • Ability to submit polls with ~.Subreddit.submit_poll.
  • .PollData and .PollOption.
  • Ability to view poll data and poll options via the .poll_data attribute on poll submissions.
  • Add method ~.Reddit.delete to .Reddit class to support HTTP DELETE requests.
  • Added .CalendarConfiguration to represent the configuration of a .Calendar widget.
  • Added .Hover to represent the hover state of a .Button.
  • Added .Styles to represent widget styling information.
  • Ability to stream live thread updates via new class .LiveThreadStream with method ~.LiveThreadStream.updates.

Changed

  • .RemovalReason.update's parameters are now optional.
  • .SubredditRemovalReasons.__getitem__ now takes integers and slices to get removal reasons from the list of reasons as returned by Reddit.

Deprecated

  • .WebSocketException.original_exception is deprecated and slated for removal in PRAW 8.0.

Fixed

  • An issue where certain subreddit settings could not be set through .SubredditModeration.update, such as welcome_message_enabled and welcome_message_text. This change also removes the need for PRAW to track current subreddit settings and send unmodified ones in the update request.
  • Instances of BadRequests captured by PRAW that do not contain any detailed JSON data are re-raised as the original BadRequest.
  • ~.Subreddit.submit_image and ~.Subreddit.submit_video will throw .MediaPostFailed when Reddit fails to post an image or video post.

7.0.0 (2020/04/24)

Added

  • config_interpolation parameter for .Reddit supporting basic and extended modes.
  • Add .partial_redditors that returns lightweight redditor objects that contain only a few fields. This is useful for resolving .Redditor IDs to their usernames in bulk.
  • .User.friends has a new parameter user that takes either an instance of .Redditor or a string containing a redditor name and returns an instance of .Redditor if the authenticated user is friends with the user, otherwise throws an exception.
  • .SubmissionModeration.flair has the parameter flair_template_id for applying flairs with template IDs.
  • .Emoji.update supports modifying an emoji's permissions.
  • .SubredditEmoji.add now supports optionally passing booleans to set an emoji's permissions upon upload.
  • Methods .SubredditLinkFlairTemplates.update and .SubredditRedditorFlairTemplates.update contain a new parameter, fetch, that toggles the automatic fetching of existing data from Reddit. It is set to True by default.
  • Values in methods .SubredditLinkFlairTemplates.update and .SubredditRedditorFlairTemplates.update that are left as the defaults will no longer be over-written if the fetch parameter is set to True, but will fill in existing values for the flair template.
  • The parameter text for methods .SubredditLinkFlairTemplates.update and .SubredditRedditorFlairTemplates.update is no longer required.
  • There is a new method, ~.Subreddit.post_requirements, to fetch a subreddit's post requirements.
  • Method .SubmissionModeration.sticky will now ignore the Conflict exception generated by trying to sticky the same post multiple times.
  • A new method .CommentModeration.show will uncollapse a comment that was collapsed because of Crowd Control
  • Methods ~.Subreddit.submit_image and ~.Subreddit.submit_video will throw .TooLargeMediaException if the submitted media is rejected by Reddit due to the size of the media.
  • Class .Reddit has an attribute, validate_on_submit, that can be set after class initialization that causes methods ~.Subreddit.submit, ~.Subreddit.submit_image, ~.Subreddit.submit_video, and .Submission.edit to check that the submission matches a subreddit's post validation rules. This attribute will be functionally useless once Reddit implements their change. This attribute will be deprecated on the next release after Reddit's change, and will be removed on the next major release after Reddit's change.

Warning

In May-June 2020, Reddit will force all submissions to run through a subreddit's validation rules.

  • Introduced a data class, .RedditErrorItem, to represent an individual error item returned from Reddit.
  • Class .RedditAPIException now serves as a container for the .RedditErrorItems. You can access the items by doing RedditAPIException.items, which returns a list.
  • .APIException is an alias to .RedditAPIException.
  • Parameter discussion_type to methods ~.Subreddit.submit, ~.Subreddit.submit_image, and ~.Subreddit.submit_video to support submitting as a live discussion (set to "CHAT").
  • Instances of .Trophy can be compared for equality with each other.
  • .Reddit has a new configurable parameter, timeout. This defaults to 16 seconds. It controls how long PRAW will wait for a response before throwing an exception.
  • PRAW now handles ratelimit errors returned as instances of .RedditAPIException.
  • .Reddit has one new parameter, ratelimit_seconds . The parameter configures the maximum amount of seconds to catch ratelimits for. It defaults to 5 seconds when not specified.

Changed

  • prawcore.BadRequest should no longer be raised. Instead, a more useful .RedditAPIException instance will be raised.
  • Set the default comment sort to confidence instead of best because it turns out best isn't actually the correct value for the parameter.

Deprecated

  • .APIException is deprecated and slated for removal in PRAW 8.0.

Fixed

  • .SubredditFlair.update will not error out when the flair text contains quote marks.

Removed

  • Converting .APIException to string will no longer escape unicode characters.
  • Module praw.models.modaction no longer exists. Please use the module praw.models.mod_action, or directly import ModAction from praw.models.
  • Methods .SubredditLinkFlairTemplates.update and .SubredditRedditorFlairTemplates.update will no longer create flairs that are using an invalid template id, but instead throw a .InvalidFlairTemplateID.
  • Method reddit.user.moderator_subreddits has been removed. Please use .moderated instead.

6.5.1 (2020/01/07)

Fixed

  • Removed usages of NoReturn that caused PRAW to fail due to ImportError in Python <3.5.4 and <3.6.2.

6.5.0 (2020/01/05)

Added

  • .set_original_content supports marking a submission as original content.
  • .unset_original_content supports unmarking a submission as original content.
  • .moderated to get a list of a redditor's moderated subreddits.
  • Parameter without_websockets to ~.Subreddit.submit_image and ~.Subreddit.submit_video to submit without using WebSockets.
  • .Reddit.redditor supports fullname param to fetch a .Redditor by the fullname instead of name. .Redditor constructor now also has fullname param.
  • Add .RemovalReason and .SubredditRemovalReasons to work with removal reasons
  • Attribute removal_reasons to .SubredditModeration to interact with new removal reason classes
  • Parameters mod_note and reason_id to ~.ThingModerationMixin.remove to optionally apply a removal reason on removal
  • Add .SubredditModerationStream to enable moderation streams
  • Attribute stream to .SubredditModeration to interact with new moderation streams
  • Add ~.SubredditModerationStream.edited to allow streaming of .SubredditModeration.edited
  • Add ~.SubredditModerationStream.log to allow streaming of .SubredditModeration.log
  • Add ~.SubredditModerationStream.modmail_conversations to allow streaming of .Modmail.conversations
  • Add ~.SubredditModerationStream.modqueue to allow streaming of .SubredditModeration.modqueue
  • Add ~.SubredditModerationStream.reports to allow streaming of .SubredditModeration.reports
  • Add ~.SubredditModerationStream.spam to allow streaming of .SubredditModeration.spam
  • Add ~.SubredditModerationStream.unmoderated to allow streaming of .SubredditModeration.unmoderated
  • Add ~.SubredditModerationStream.unread to allow streaming of .SubredditModeration.unread
  • Parameter exclude_before to .stream_generator to allow ~.SubredditModerationStream.modmail_conversations to work
  • Parameters allowable_content and max_emojis to ~.SubredditRedditorFlairTemplates.add, ~.SubredditLinkFlairTemplates.add, and ~.SubredditFlairTemplates.update, as well as its child classes.

Deprecated

  • Method reddit.user.moderator_subreddits as .moderated provides more functionality.
  • The file for ModActions (praw/models/modaction.py) has been moved to praw/models/mod_action.py and the previous has been deprecated.

Expected Changes

  • The behavior of APIException will no longer unicode-escape strings in the next minor release.

6.4.0 (2019/09/21)

Added

  • .crosspost support parameter flair_id to flair the submission immediately upon crossposting.
  • .crosspost support parameter flair_text to set a custom text to the flair immediately upon crossposting.
  • .crosspost support parameter nsfw to mark the submission NSFW immediately upon crossposting.
  • .crosspost support parameter spoiler to mark the submission as a spoiler immediately upon crossposting.

Fixed

  • .add_community_list has parameter description to support unannounced upstream Reddit API changes.
  • .WidgetModeration.update supports passing a list of .Subreddit objects.

Changed

  • Removed css_class parameter cannot be used with background_color, text_color, or mod_only constraint on methods:
    • SubredditFlairTemplates.update()
    • SubredditRedditorFlairTemplates.add()
    • SubredditLinkFlairTemplates.add()

Removed

  • Drop official support for Python 2.7.
  • Multireddit.rename() no longer works due to a change in the Reddit API.

6.3.1 (2019/06/10)

Removed

  • SubredditListingMixin.gilded(), as this was supposed to be removed in 6.0.0 after deprecation in 5.2.0.

6.3.0 (2019/06/09)

Added

  • Collections (.Collection and helper classes).
  • ~.Subreddit.submit, ~.Subreddit.submit_image, and ~.Subreddit.submit_video can be used to submit a post directly to a collection.
  • praw.util.camel_to_snake and praw.util.snake_case_keys.
  • Comments can now be locked and unlocked via comment.mod.lock() and comment.mod.unlock(). See: (~.ThingModerationMixin.lock and ~.ThingModerationMixin.unlock).
  • align parameter to .upload_banner_additional_image

Changed

  • .Reddit.info now accepts any non-str iterable for fullnames (not just list).
  • .Reddit.info now returns a generator instead of a list when using the url parameter.

6.2.0 (2019/05/05)

Added

  • .upload_banner
  • .upload_banner_additional_image
  • .upload_banner_hover_image
  • .delete_banner
  • .delete_banner_additional_image
  • .delete_banner_hover_image
  • ~.Subreddit.submit, ~.Subreddit.submit_image, and ~.Subreddit.submit_video support parameter nsfw to mark the submission NSFW immediately upon posting.
  • ~.Subreddit.submit, ~.Subreddit.submit_image, and ~.Subreddit.submit_video support parameter spoiler to mark the submission as a spoiler immediately upon posting.
  • ~.Subreddit.submit_image and ~.Subreddit.submit_video support parameter timeout. Default timeout has been raised from 2 seconds to 10 seconds.
  • Added parameter function_kwargs to .stream_generator to pass additional kwargs to function.

Fixed

  • .Subreddit.random returns None instead of raising .ClientException when the subreddit does not support generating random submissions.

Other

  • Bumped minimum prawcore version to 1.0.1.

6.1.1 (2019/01/29)

Added

  • .SubredditFlair.set supports parameter flair_template_id for giving a user redesign flair.

6.1.0 (2019/01/19)

Added

  • Add method .Redditor.trophies to get a list of the Redditor's trophies.
  • Add class .PostFlairWidget.
  • Add attributes reply_limit and reply_sort to class .Comment
  • Add class .SubredditWidgetsModeration (accessible through .SubredditWidgets.mod) and method .add_text_area.
  • Add class .WidgetModeration (accessible through the .mod attribute on any widget) with methods ~.WidgetModeration.update and ~.WidgetModeration.delete.
  • Add method .Reddit.put for HTTP PUT requests.
  • Add methods .add_calendar and .add_community_list.
  • Add methods .add_image_widget and .upload_image.
  • Add method .add_custom_widget.
  • Add method .add_post_flair_widget.
  • Add method .add_menu.
  • Add method .add_button_widget.
  • Add method ~.SubredditWidgetsModeration.reorder to reorder a subreddit's widgets.
  • Add .Redditors (reddit.redditors) to provide .Redditor listings.
  • Add ~.Subreddit.submit_image for submitting native images to Reddit.
  • Add ~.Subreddit.submit_video for submitting native videos and videogifs to Reddit.

Changed

  • .me returns None in .read_only mode.
  • .SubredditLinkFlairTemplates.__iter__ uses the v2 flair API endpoint. This change will result in additional fields being returned. All fields that were previously returned will still be returned.
  • .SubredditRedditorFlairTemplates.__iter__ uses the v2 flair API endpoint. The method will still return the exact same items.
  • Methods .SubredditRedditorFlairTemplates.add, .SubredditLinkFlairTemplates.add, .SubredditRedditorFlairTemplates.update, and .SubredditLinkFlairTemplates.update can add and update redesign-style flairs with the v2 flair API endpoint. They can still update pre-redesign-style flairs with the older endpoint.

Fixed

  • Widgets of unknown types are parsed as .Widgets rather than raising an exception.

6.0.0 (2018/07/24)

Added

  • Add method .revision to get a specific wiki page revision.
  • Added parameter skip_existing to .stream_generator to skip existing items when starting a stream.
  • Add method .Front.best to get the front page "best" listing.
  • Add .Subreddit.widgets, .SubredditWidgets, and widget subclasses like .TextArea to support fetching Reddit widgets.
  • Add method .Submission.mark_visited to mark a submission as visited on the Reddit backend.

Fixed

  • Fix :pyRecursionError on .SubredditEmoji's repr and str.
  • .SubredditFilters.add and .SubredditFilters.remove also accept a .Subreddit for the subreddit parameter.
  • Remove restriction which prevents installed (non-confidential) apps from using OAuth2 authorization code grant flow.

Removed

5.4.0 (2018/03/27)

Added

  • Add method ~.Reddit.patch to .Reddit class to support HTTP PATCH requests.
  • Add class .Preferences to access and update Reddit preferences.
  • Add attribute .User.preferences to access an instance of .Preferences.
  • Add method .Message.delete.
  • Add class .Emoji to work with custom subreddit emoji.

Deprecated

Fixed

  • Fix bug with positive pause_after values in streams provided by .stream_generator where the wait time was not reset after a yielded None.
  • Parse URLs with trailing slashes and no "comments" element when creating .Submission objects.
  • Fix bug where Subreddit.submissions returns a same submission more than once
  • Fix bug where ListingGenerator fetches the same batch of submissions in an infinite loop when "before" parameter is provided.

Removed

  • Removed support for Python 3.3 as it is no longer supported by requests.

5.3.0 (2017/12/16)

Added

  • .Multireddit.stream, to stream submissions and comments from a multireddit.
  • .Redditor.block

Fixed

  • Now raises prawcore.UnavailableForLegalReasons instead of an :pyAssertionError when encountering a HTTP 451 response.

5.2.0 (2017/10/24)

Changed

  • An attribute on .LiveUpdate now works as lazy attribute (i.e., populate an attribute when the attribute is first accessed).

Deprecated

  • subreddit.comments.gilded because there isn't actually an endpoint that returns only gilded comments. Use subreddit.gilded instead.

Fixed

  • Removed comment.permalink() because comment.permalink is now an attribute returned by Reddit.

5.1.0 (2017/08/31)

Added

  • .Redditor.stream, with methods .RedditorStream.submissions and .RedditorStream.comments to stream a Redditor's comments or submissions
  • .RedditorStream has been added to facilitate .Redditor.stream
  • .Inbox.collapse to mark messages as collapsed.
  • .Inbox.uncollapse to mark messages as uncollapsed.
  • Raise .ClientException when calling .Comment.refresh when the comment does not appear in the resulting comment tree.
  • .Submission.crosspost to crosspost to a subreddit.

Fixed

  • Calling .Comment.refresh on a directly fetched, deeply nested .Comment will additionally pull in as many parent comments as possible (currently 8) enabling significantly quicker traversal to the top-most .Comment via successive .parent calls.
  • Calling ~.Comment.refresh previously could have resulted in a AttributeError: "MoreComments" object has no attribute "_replies" exception. This situation will now result in a .ClientException.
  • Properly handle BAD_CSS_NAME errors when uploading stylesheet images with invalid filenames. Previously an :pyAssertionError was raised.
  • .Submission's gilded attribute properly returns the expected value from reddit.

5.0.1 (2017/07/11)

Fixed

  • Calls to .hide and .unhide properly batch into requests of 50 submissions at a time.
  • Lowered the average maximum delay between inactive stream checks by 4x to 16 seconds. It was previously 64 seconds, which was too long.

5.0.0 (2017/07/04)

Added

  • .Comment.disable_inbox_replies, .Comment.enable_inbox_replies .Submission.disable_inbox_replies, and .Submission.enable_inbox_replies to toggle inbox replies on comments and submissions.

Changed

  • cloudsearch is no longer the default syntax for ~.Subreddit.search. lucene is now the default syntax so that PRAW's default is aligned with Reddit's default.
  • .Reddit.info will now take either a list of fullnames or a single URL string.
  • .Subreddit.submit accepts a flair template ID and text.

Fixed

  • Fix accessing .LiveUpdate.contrib raises AttributeError.

Removed

  • Iterating directly over .SubredditRelationship (e.g., subreddit.banned, subreddit.contributor, subreddit.moderator, etc) and .SubredditFlair is no longer possible. Iterate instead over their callables, e.g. subreddit.banned() and subreddit.flair().
  • The following methods are removed: Subreddit.mod.approve, Subreddit.mod.distinguish, Subreddit.mod.ignore_reports, Subreddit.mod.remove, Subreddit.mod.undistinguish, Subreddit.mod.unignore_reports.
  • Support for passing a .Submission to .SubredditFlair.set is removed.
  • The thing argument to .SubredditFlair.set is removed.
  • Return values from .Comment.block, .Message.block, .SubredditMessage.block, .SubredditFlair.delete, .friend, .Redditor.message, .Subreddit.message, .select, and .unfriend are removed as they do not provide any useful information.
  • praw.ini no longer reads in http_proxy and https_proxy settings.
  • is_link parameter of .SubredditRedditorFlairTemplates.add and .SubredditRedditorFlairTemplates.clear. Use .SubredditLinkFlairTemplates instead.

4.6.0 (2017/07/04)

The release's sole purpose is to announce the deprecation of the is_link parameter as described below:

Added

  • .SubredditFlair.link_templates to manage link flair templates.

Deprecated

  • is_link parameter of .SubredditRedditorFlairTemplates.add and .SubredditRedditorFlairTemplates.clear. Use .SubredditLinkFlairTemplates instead.

4.5.1 (2017/05/07)

Fixed

  • Calling .parent works on .Comment instances obtained via .comment_replies.

4.5.0 (2017/04/29)

Added

  • .Modmail.unread_count to get unread count by conversation state.
  • .Modmail.bulk_read to mark conversations as read by conversation state.
  • .Modmail.subreddits to fetch subreddits using new modmail.
  • .Modmail.create to create a new modmail conversation.
  • .ModmailConversation.read to mark modmail conversations as read.
  • .ModmailConversation.unread to mark modmail conversations as unread.
  • .conversations to get new modmail conversations.
  • .ModmailConversation.highlight to highlight modmail conversations.
  • .ModmailConversation.unhighlight to unhighlight modmail conversations.
  • .ModmailConversation.mute to mute modmail conversations.
  • .ModmailConversation.unmute to unmute modmail conversations.
  • .ModmailConversation.archive to archive modmail conversations.
  • .ModmailConversation.unarchive to unarchive modmail conversations.
  • .ModmailConversation.reply to reply to modmail conversations.
  • .Modmail.__call__ to get a new modmail conversation.
  • .Inbox.stream to stream new items in the inbox.
  • Exponential request delay to all streams when no new items are returned in a request. The maximum delay between requests is 66 seconds.

Changed

  • ~.Subreddit.submit accepts selftext='' to create a title-only submission.
  • .Reddit accepts requestor_class=cls for a customized requestor class and requestor_kwargs={"param": value} for passing arguments to requestor initialization.
  • .SubredditStream.comments, .SubredditStream.submissions, and .Subreddits.stream accept a pause_after argument to allow pausing of the stream. The default value of None retains the preexisting behavior.

Deprecated

  • cloudsearch will no longer be the default syntax for .Subreddit.search in PRAW 5. Instead, lucene will be the default syntax so that PRAW's default is aligned with Reddit's default.

Fixed

  • Fix bug where .WikiPage revisions with deleted authors caused TypeError.
  • .Submission attributes comment_limit and comment_sort maintain their values after making instances non-lazy.

4.4.0 (2017/02/21)

Added

  • .LiveThreadContribution.update to update settings of a live thread.
  • reset_timestamp to .limits to provide insight into when the current rate limit window will expire.
  • .upload_mobile_header to upload subreddit mobile header.
  • .upload_mobile_icon to upload subreddit mobile icon.
  • .delete_mobile_header to remove subreddit mobile header.
  • .delete_mobile_icon to remove subreddit mobile icon.
  • .LiveUpdateContribution.strike to strike a content of a live thread.
  • .LiveContributorRelationship.update to update contributor permissions for a redditor.
  • .LiveContributorRelationship.update_invite to update contributor invite permissions for a redditor.
  • .LiveThread.discussions to get submissions linking to the thread.
  • .LiveThread.report to report the thread violating the Reddit rules.
  • .LiveHelper.now to get the currently featured live thread.
  • .LiveHelper.info to fetch information about each live thread in live thread IDs.

Fixed

  • Uploading an image resulting in too large of a request (>500 KB) now raises prawcore.TooLarge instead of an :pyAssertionError.
  • Uploading an invalid image raises APIException.
  • .Redditor instances obtained via ~.Subreddit.moderator (e.g., reddit.subreddit("test").moderator()) will contain attributes with the relationship metadata (e.g., mod_permissions).
  • .Message instances retrieved from the inbox now have attributes author, dest replies and subreddit properly converted to their appropriate PRAW model.

4.3.0 (2017/01/19)

Added

  • .LiveContributorRelationship.leave to abdicate the live thread contributor position.
  • .LiveContributorRelationship.remove to remove the redditor from the live thread contributors.
  • .limits to provide insight into number of requests made and remaining in the current rate limit window.
  • .LiveThread.contrib to obtain an instance of .LiveThreadContribution.
  • .LiveThreadContribution.add to add an update to the live thread.
  • .LiveThreadContribution.close to close the live thread permanently.
  • .LiveUpdate.contrib to obtain an instance of .LiveUpdateContribution.
  • .LiveUpdateContribution.remove to remove a live update.
  • .LiveContributorRelationship.accept_invite to accept an invite to contribute the live thread.
  • .SubredditHelper.create and .SubredditModeration.update have documented support for spoilers_enabled. Note, however, that .SubredditModeration.update will currently unset the spoilers_enabled value until such a time that Reddit returns the value along with the other settings.
  • .spoiler and .unspoiler to change a submission's spoiler status.

Fixed

  • .LiveContributorRelationship.invite and .LiveContributorRelationship.remove_invite now hit endpoints, which starts with "api/", for consistency.
  • .ModeratorRelationship.update, and .ModeratorRelationship.update_invite now always remove known unlisted permissions.

4.2.0 (2017/01/07)

Added

  • .Subreddit.rules to get the rules of a subreddit.
  • .LiveContributorRelationship, which can be obtained through .LiveThread.contributor, to interact with live threads' contributors.
  • ~.ModeratorRelationship.remove_invite to remove a moderator invite.
  • .LiveContributorRelationship.invite to send a contributor invitation.
  • .LiveContributorRelationship.remove_invite to remove the contributor invitation.

Deprecated

  • Return values from .Comment.block, .Message.block, .SubredditMessage.block, .SubredditFlair.delete, .friend, .Redditor.message, .Subreddit.message, .select, and .unfriend will be removed in PRAW 5 as they do not provide any useful information.

Fixed

  • .hide and .unhide now accept a list of additional submissions.
  • .replace_more is now recoverable. Previously, when an exception was raised during the work done by .replace_more, all unreplaced .MoreComments instances were lost. Now .MoreComments instances are only removed once their children have been added to the .CommentForest enabling callers of .replace_more to call the method as many times as required to complete the replacement.
  • Working with contributors on .SubredditWiki is done consistently through contributor not contributors.
  • Subreddit.moderator() works.
  • live_thread.contributor() now returns .RedditorList correctly.

Removed

  • validate_time_filter is no longer part of the public interface.

4.1.0 (2016/12/24)

Added

  • .Subreddits.search_by_topic to search subreddits by topic. (see: https://www.reddit.com/dev/api/#GET_api_subreddits_by_topic).
  • .LiveHelper.__call__ to provide interface to praw.models.LiveThread.__init__.
  • .SubredditFilters to work with filters for special subreddits, like r/all.
  • Added callables for .SubredditRelationship and .SubredditFlair so that limit and other parameters can be passed.
  • Add .Message.reply to .Message which was accidentally missed previously.
  • Add sticky parameter to .CommentModeration.distinguish to sticky comments.
  • .Submission.flair to add a submission's flair from an instance of .Submission.
  • .Comment.parent to obtain the parent of a .Comment.
  • .opt_in and .opt_out to .Subreddit to permit working with quarantined subreddits.
  • .LiveUpdate to represent an individual update in a .LiveThread.
  • Ability to access an individual .LiveUpdate via reddit.live("THREAD_ID")["UPDATE_ID"].
  • .LiveThread.updates to iterate the updates of the thread.

Changed

  • .me now caches its result in order to reduce redundant requests for methods that depend on it. Set use_cache=False when calling to bypass the cache.
  • .replace_more can be called on .Comment replies.

Deprecated

  • validate_time_filter will be removed from the public interface in PRAW 4.2 as it was never intended to be part of it to begin with.
  • Iterating directly over .SubredditRelationship (e.g., subreddit.banned, subreddit.contributor, subreddit.moderator, etc) and .SubredditFlair will be removed in PRAW 5. Iterate instead over their callables, e.g. subreddit.banned() and subreddit.flair().
  • The following methods are deprecated to be removed in PRAW 5 and are replaced with similar Comment.mod... and Submission.mod... alternatives: Subreddit.mod.approve, Subreddit.mod.distinguish, Subreddit.mod.ignore_reports, Subreddit.mod.remove, Subreddit.mod.undistinguish, Subreddit.mod.unignore_reports.
  • Support for passing a .Submission to .SubredditFlair.set will be removed in PRAW 5. Use .Submission.flair instead.
  • The thing argument to .SubredditFlair.set is replaced with redditor and will be removed in PRAW 5.

Fixed

  • .SubredditModeration.update accurately updates exclude_banned_modqueue, header_hover_text, show_media and show_media_preview values.
  • Instances of .Comment obtained through the inbox (including mentions) are now refreshable.
  • Searching r/all should now work as intended for all users.
  • Accessing an invalid attribute on an instance of .Message will raise :pyAttributeError instead of .PRAWException.

4.0.0 (2016/11/29)

Fixed

  • Fix bug where ipython tries to access attribute _ipython_canary_method_should_not_exist_ resulting in a useless fetch.
  • Fix bug where .Comment replies becomes [] after attempting to access an invalid attribute on the Comment.
  • Reddit.wiki[...] converts the passed in page name to lower case as pages are only saved in lower case and non-lower case page names results in a Redirect exception (thanks pcjonathan).

4.0.0rc3 (2016/11/26)

Added

4.0.0rc2 (2016/11/20)

Fixed

  • .Auth.authorize properly sets the session's Authentication (thanks @williammck).

4.0.0rc1 (2016/11/20)

PRAW 4 introduces significant breaking changes. The numerous changes are not listed here, only the feature removals. Please read through /getting_started/quick_start to help with updating your code to PRAW 4. If you require additional help please ask on r/redditdev or via Slack.

Added

  • .Comment.block, .Message.block, and .SubredditMessage.block to permit blocking unwanted user contact.
  • .LiveHelper.create to create new live threads.
  • .Redditor.unblock to undo a block.
  • .Subreddits.gold to iterate through gold subreddits.
  • .Subreddits.search to search for subreddits by name and description.
  • .Subreddits.stream to obtain newly created subreddits in near realtime.
  • .User.karma to retrieve the current user's subreddit karma.
  • praw.models.reddit.submission.SubmissionModeration.lock and praw.models.reddit.submission.SubmissionModeration.unlock to change a Submission's lock state.
  • .SubredditFlairTemplates.delete to delete a single flair template.
  • .SubredditModeration.unread to iterate over unread moderation messages.
  • .ModeratorRelationship.invite to invite a moderator to a subreddit.
  • .ModeratorRelationship.update to update a moderator's permissions.
  • .ModeratorRelationship.update_invite to update an invited moderator's permissions.
  • .Front.random_rising, .Subreddit.random_rising and .Multireddit.random_rising.
  • .WikiPage supports a revision argument.
  • .SubredditWiki.revisions to obtain a list of recent revisions to a subreddit.
  • .WikiPage.revisions to obtain a list of revisions for a wiki page.
  • Support installed-type OAuth apps.
  • Support read-only OAuth for all application types.
  • Support script-type OAuth apps.

Changed

Note

Only prominent changes are listed here.

  • helpers.comments_stream is now .SubredditStream.comments
  • helpers.submissions_between is now Subreddit.submissions. This new method now only iterates through newest submissions first and as a result makes approximately 33% fewer requests.
  • helpers.submission_stream is now .SubredditStream.submissions

Removed

  • Removed .Reddit's login method. Authentication must be done through OAuth.
  • Removed praw-multiprocess as this functionality is no longer needed with PRAW 4.
  • Removed non-oauth functions Message.collapse and Message.uncollapse is_username_available.
  • Removed captcha related functions.

For changes prior to version 4.0 please see: 3.6.2 changelog