39 lines
1.4 KiB
Python
39 lines
1.4 KiB
Python
"""Internal helper functions used by praw.decorators."""
|
|
import inspect
|
|
from requests.compat import urljoin
|
|
import six
|
|
import sys
|
|
|
|
|
|
def _get_captcha(reddit_session, captcha_id):
|
|
"""Prompt user for captcha solution and return a prepared result."""
|
|
url = urljoin(reddit_session.config['captcha'],
|
|
captcha_id + '.png')
|
|
sys.stdout.write('Captcha URL: {0}\nCaptcha: '.format(url))
|
|
sys.stdout.flush()
|
|
raw = sys.stdin.readline()
|
|
if not raw: # stdin has reached the end of file
|
|
# Trigger exception raising next time through. The request is
|
|
# cached so this will not require and extra request and delay.
|
|
sys.stdin.close()
|
|
return None
|
|
return {'iden': captcha_id, 'captcha': raw.strip()}
|
|
|
|
|
|
def _is_mod_of_all(user, subreddit):
|
|
mod_subs = user.get_cached_moderated_reddits()
|
|
subs = six.text_type(subreddit).lower().split('+')
|
|
return all(sub in mod_subs for sub in subs)
|
|
|
|
|
|
def _make_func_args(function):
|
|
if six.PY3 and not hasattr(sys, 'pypy_version_info'):
|
|
# CPython3 uses inspect.signature(), not inspect.getargspec()
|
|
# see #551 and #541 for more info
|
|
func_items = inspect.signature(function).parameters.items()
|
|
func_args = [name for name, param in func_items
|
|
if param.kind == param.POSITIONAL_OR_KEYWORD]
|
|
else:
|
|
func_args = inspect.getargspec(function).args
|
|
return func_args
|