forked from mirrors/gecko-dev
77 lines
2 KiB
Python
77 lines
2 KiB
Python
import requests
|
|
import sys
|
|
|
|
from .adapters import UnixAdapter
|
|
|
|
DEFAULT_SCHEME = 'http+unix://'
|
|
|
|
|
|
class Session(requests.Session):
|
|
def __init__(self, url_scheme=DEFAULT_SCHEME, *args, **kwargs):
|
|
super(Session, self).__init__(*args, **kwargs)
|
|
self.mount(url_scheme, UnixAdapter())
|
|
|
|
|
|
class monkeypatch(object):
|
|
def __init__(self, url_scheme=DEFAULT_SCHEME):
|
|
self.session = Session()
|
|
requests = self._get_global_requests_module()
|
|
|
|
# Methods to replace
|
|
self.methods = ('request', 'get', 'head', 'post',
|
|
'patch', 'put', 'delete', 'options')
|
|
# Store the original methods
|
|
self.orig_methods = dict(
|
|
(m, requests.__dict__[m]) for m in self.methods)
|
|
# Monkey patch
|
|
g = globals()
|
|
for m in self.methods:
|
|
requests.__dict__[m] = g[m]
|
|
|
|
def _get_global_requests_module(self):
|
|
return sys.modules['requests']
|
|
|
|
def __enter__(self):
|
|
return self
|
|
|
|
def __exit__(self, *args):
|
|
requests = self._get_global_requests_module()
|
|
for m in self.methods:
|
|
requests.__dict__[m] = self.orig_methods[m]
|
|
|
|
|
|
# These are the same methods defined for the global requests object
|
|
def request(method, url, **kwargs):
|
|
session = Session()
|
|
return session.request(method=method, url=url, **kwargs)
|
|
|
|
|
|
def get(url, **kwargs):
|
|
kwargs.setdefault('allow_redirects', True)
|
|
return request('get', url, **kwargs)
|
|
|
|
|
|
def head(url, **kwargs):
|
|
kwargs.setdefault('allow_redirects', False)
|
|
return request('head', url, **kwargs)
|
|
|
|
|
|
def post(url, data=None, json=None, **kwargs):
|
|
return request('post', url, data=data, json=json, **kwargs)
|
|
|
|
|
|
def patch(url, data=None, **kwargs):
|
|
return request('patch', url, data=data, **kwargs)
|
|
|
|
|
|
def put(url, data=None, **kwargs):
|
|
return request('put', url, data=data, **kwargs)
|
|
|
|
|
|
def delete(url, **kwargs):
|
|
return request('delete', url, **kwargs)
|
|
|
|
|
|
def options(url, **kwargs):
|
|
kwargs.setdefault('allow_redirects', True)
|
|
return request('options', url, **kwargs)
|