Skip to content

Commit

Permalink
Sort praw.models.base.PRAWBase._safely_add_arguments arguments
Browse files Browse the repository at this point in the history
  • Loading branch information
LilSpazJoekp committed Jan 29, 2022
1 parent 6c42c98 commit cdbada1
Show file tree
Hide file tree
Showing 6 changed files with 31 additions and 21 deletions.
8 changes: 4 additions & 4 deletions praw/models/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,17 +10,17 @@ class PRAWBase:
"""Superclass for all models in PRAW."""

@staticmethod
def _safely_add_arguments(argument_dict, key, **new_arguments):
"""Replace argument_dict[key] with a deepcopy and update.
def _safely_add_arguments(*, arguments, key, **new_arguments):
"""Replace arguments[key] with a deepcopy and update.
This method is often called when new parameters need to be added to a request.
By calling this method and adding the new or updated parameters we can insure we
don't modify the dictionary passed in by the caller.
"""
value = deepcopy(argument_dict[key]) if key in argument_dict else {}
value = deepcopy(arguments[key]) if key in arguments else {}
value.update(new_arguments)
argument_dict[key] = value
arguments[key] = value

@classmethod
def parse(cls, data: Dict[str, Any], reddit: "praw.Reddit") -> Any:
Expand Down
4 changes: 3 additions & 1 deletion praw/models/inbox.py
Original file line number Diff line number Diff line change
Expand Up @@ -333,5 +333,7 @@ def unread(
print(item.author)
"""
self._safely_add_arguments(generator_kwargs, "params", mark=mark_read)
self._safely_add_arguments(
arguments=generator_kwargs, key="params", mark=mark_read
)
return ListingGenerator(self._reddit, API_PATH["unread"], **generator_kwargs)
10 changes: 7 additions & 3 deletions praw/models/listing/mixins/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ def _validate_time_filter(time_filter):
def _prepare(self, *, arguments, sort):
"""Fix for :class:`.Redditor` methods that use a query param rather than subpath."""
if self.__dict__.get("_listing_use_sort"):
self._safely_add_arguments(arguments, "params", sort=sort)
self._safely_add_arguments(arguments=arguments, key="params", sort=sort)
return self._path
return urljoin(self._path, sort)

Expand Down Expand Up @@ -62,7 +62,9 @@ def controversial(
"""
self._validate_time_filter(time_filter)
self._safely_add_arguments(generator_kwargs, "params", t=time_filter)
self._safely_add_arguments(
arguments=generator_kwargs, key="params", t=time_filter
)
url = self._prepare(arguments=generator_kwargs, sort="controversial")
return ListingGenerator(self._reddit, url, **generator_kwargs)

Expand Down Expand Up @@ -140,6 +142,8 @@ def top(
"""
self._validate_time_filter(time_filter)
self._safely_add_arguments(generator_kwargs, "params", t=time_filter)
self._safely_add_arguments(
arguments=generator_kwargs, key="params", t=time_filter
)
url = self._prepare(arguments=generator_kwargs, sort="top")
return ListingGenerator(self._reddit, url, **generator_kwargs)
26 changes: 15 additions & 11 deletions praw/models/reddit/subreddit.py
Original file line number Diff line number Diff line change
Expand Up @@ -827,8 +827,8 @@ def search(
self._validate_time_filter(time_filter)
not_all = self.display_name.lower() != "all"
self._safely_add_arguments(
generator_kwargs,
"params",
arguments=generator_kwargs,
key="params",
q=query,
restrict_sr=not_all,
sort=sort,
Expand Down Expand Up @@ -1715,7 +1715,9 @@ def __call__(
print(flair)
"""
Subreddit._safely_add_arguments(generator_kwargs, "params", name=redditor)
Subreddit._safely_add_arguments(
arguments=generator_kwargs, key="params", name=redditor
)
generator_kwargs.setdefault("limit", None)
url = API_PATH["flairlist"].format(subreddit=self.subreddit)
return ListingGenerator(self.subreddit._reddit, url, **generator_kwargs)
Expand Down Expand Up @@ -2292,7 +2294,9 @@ def _handle_only(*, generator_kwargs: Dict[str, Any], only: Optional[str]):
if only is not None:
if only == "submissions":
only = "links"
RedditBase._safely_add_arguments(generator_kwargs, "params", only=only)
RedditBase._safely_add_arguments(
arguments=generator_kwargs, key="params", only=only
)

def __init__(self, subreddit: "praw.models.Subreddit"):
"""Initialize a :class:`.SubredditModeration` instance.
Expand Down Expand Up @@ -2401,7 +2405,9 @@ def log(
"""
params = {"mod": str(mod) if mod else mod, "type": action}
Subreddit._safely_add_arguments(generator_kwargs, "params", **params)
Subreddit._safely_add_arguments(
arguments=generator_kwargs, key="params", **params
)
return ListingGenerator(
self.subreddit._reddit,
API_PATH["about_log"].format(subreddit=self.subreddit),
Expand Down Expand Up @@ -3005,7 +3011,9 @@ def __call__(
:class:`.ListingGenerator`.
"""
Subreddit._safely_add_arguments(generator_kwargs, "params", user=redditor)
Subreddit._safely_add_arguments(
arguments=generator_kwargs, key="params", user=redditor
)
url = API_PATH[f"list_{self.relationship}"].format(subreddit=self.subreddit)
return ListingGenerator(self.subreddit._reddit, url, **generator_kwargs)

Expand Down Expand Up @@ -3486,11 +3494,7 @@ def conversations(
if self.subreddit != "all":
params["entity"] = self._build_subreddit_list(other_subreddits)
Subreddit._safely_add_arguments(
generator_kwargs,
"params",
sort=sort,
state=state,
**params,
arguments=generator_kwargs, key="params", sort=sort, state=state, **params
)
return ListingGenerator(
self.subreddit._reddit,
Expand Down
2 changes: 1 addition & 1 deletion praw/models/redditors.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ def search(
:class:`.ListingGenerator`.
"""
self._safely_add_arguments(generator_kwargs, "params", q=query)
self._safely_add_arguments(arguments=generator_kwargs, key="params", q=query)
return ListingGenerator(
self._reddit, API_PATH["users_search"], **generator_kwargs
)
Expand Down
2 changes: 1 addition & 1 deletion praw/models/subreddits.py
Original file line number Diff line number Diff line change
Expand Up @@ -123,7 +123,7 @@ def search(
:meth:`.search_by_name` to search by subreddit names
"""
self._safely_add_arguments(generator_kwargs, "params", q=query)
self._safely_add_arguments(arguments=generator_kwargs, key="params", q=query)
return ListingGenerator(
self._reddit, API_PATH["subreddits_search"], **generator_kwargs
)
Expand Down

0 comments on commit cdbada1

Please sign in to comment.